added cafeteria example

This commit is contained in:
Luciano Ramalho
2021-05-21 00:26:43 -03:00
parent fc81928f36
commit ff5fdd8f7c
4 changed files with 82 additions and 68 deletions

View File

@@ -1,41 +0,0 @@
from typing import TypeVar, Generic
class Beverage:
"""Any beverage"""
class Juice(Beverage):
"""Any fruit juice"""
class OrangeJuice(Juice):
"""Delicious juice Brazilian oranges"""
class Coak(Beverage):
"""Secret formula with lots of sugar"""
BeverageT = TypeVar('BeverageT', bound=Beverage)
JuiceT = TypeVar('JuiceT', bound=Juice)
class BeverageDispenser(Generic[BeverageT]):
beverage: BeverageT
def __init__(self, beverage: BeverageT) -> None:
self.beverage = beverage
def dispense(self) -> BeverageT:
return self.beverage
class JuiceDispenser(BeverageDispenser[JuiceT]):
pass
class Cafeteria:
def __init__(self, dispenser: BeverageDispenser[JuiceT]):
self.dispenser = dispenser

View File

@@ -1,23 +0,0 @@
from cafeteria import (
Cafeteria,
BeverageDispenser,
JuiceDispenser,
Juice,
OrangeJuice,
Coak,
)
orange = OrangeJuice()
orange_dispenser: JuiceDispenser[OrangeJuice] = JuiceDispenser(orange)
juice: Juice = orange_dispenser.dispense()
soda = Coak()
## Value of type variable "JuiceT" of "JuiceDispenser" cannot be "Coak"
# soda_dispenser = JuiceDispenser(soda)
soda_dispenser = BeverageDispenser(soda)
arnold_hall = Cafeteria(soda_dispenser)