ch15: draft examples

This commit is contained in:
Luciano Ramalho
2021-05-20 22:58:05 -03:00
parent 5312d4f824
commit 1689eec623
19 changed files with 501 additions and 36 deletions

View File

@@ -0,0 +1,41 @@
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

@@ -0,0 +1,23 @@
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)