Objekty a třídy v Pythonu – Palačinkový recept
Co se naučíme
- Co je objekt a třída v Pythonu
- Jak si pomocí třídy zorganizovat svůj kód
- Jak na objektově orientované myšlení (s palačinkami 🥞)
Recept jako třída
Funkce jsme si vysvětlovali na receptu na palačinky.
def osmaz_jednu_palacinku():
print("Nalij těsto na pánev.")
print("Osmaž palačinku z jedné strany.")
print("Otoč palačinku.")
print("Dej palačinku na talíř.")
def namaz_palacinku(cim_namazat):
"namaze palacinu"
print("Namaž palačinku", cim_namazat, ".")
print("Zaroluj palačinku.")
print("Recept na palačinky:")
print("--------------------")
print("Smíchej mouku, vejce, mléko a špetku soli.")
print("Vyšlehej do hladkého těsta.")
osmaz_jednu_palacinku()
osmaz_jednu_palacinku()
osmaz_jednu_palacinku()
osmaz_jednu_palacinku()
namaz_palacinku("jahodovou marmeládou")
namaz_palacinku("čokoládovým krémem")
namaz_palacinku("tvarohem")
namaz_palacinku("medem")
print("Palačinky odnes na stůl a podávej.")
Teď si představme, že chceme ten recept použít znovu, ale s různým počtem palačinek a různou náplní.
To je ideální práce pro třídu – takový univerzální recept, podle kterého si pak uděláme objekty, tedy konkrétní dávky palačinek.
Příklad: Třída Palacinka
class Palacinky:
def __init__(self, pocet_palacinek, cim_plnime):
self.pocet_palacinek = pocet_palacinek
self.mouka = 15 * pocet_palacinek
self.sul = round(0.1 * pocet_palacinek)
self.vejce = round(0.2 * pocet_palacinek)
self.mleko = 37 * pocet_palacinek
self.cim_plnime = cim_plnime
def __str__(self):
return (
f"Recept na palačinky:\n"
f"--------------------\n"
f"Smíchej {self.mouka} g mouky, {self.vejce} vajec, {self.mleko} ml mléka a {self.sul} špetek soli.\n"
f"Vyšlehej do hladkého těsta.\n"
)
def osmaz_jednu(self):
"""osmaží jednu palačinku"""
print("Nalij těsto na pánev.")
print("Osmaž palačinku z jedné strany.")
print("Otoč palačinku.")
print("Dej palačinku na talíř.")
def osmaz_vsechny(self):
"""osmaží všechny palačinky"""
for palacinka in range(self.pocet_palacinek):
print(f"Smažíme {palacinka+1}. palačinku:")
self.osmaz_jednu()
print()
time.sleep(2)
def namaz_jednu(self):
"""namaže palacinku"""
print(f"Namaž palačinku {self.cim_plnime}.")
print("Zaroluj palačinku.")
def namaz_vsechny(self):
"""namaže všechny palačinky"""
for palacinka in range(self.pocet_palacinek):
print(f"Mažeme {palacinka+1}. palačinku:")
self.namaz_jednu()
print()
time.sleep(2)
print("Palačinky odnes na stůl a podávej.")
palacinky = Palacinky(5, "tvarohem")
print(palacinky)
palacinky.osmaz_vsechny()
palacinky.namaz_vsechny()
Třída Palacinka reprezentuje jeden konkrétní recept, a my si z ní vytvoříme objekt palacinky
– 10 palačinek s tvarohem.
👩🍳 Co dělá __init__?
__init__ je speciální metoda, která se spustí automaticky, když vzniká nový recept na várku palačinek.
Řekneme jí třeba: Palacinka(5, "marmeláda") – a ona si na základě toho, že chceme 5 palačinek s marmeládou spočítá, kolik mouky a vajec bude potřeba, a všechno si připraví na další vaření.
A to si uloží jako svoje atributy.
🧁 A co je self?
self je takové kouzelné slovo, které v metodách vždy odkazuje na náš konkrétní recept na várku palačinek.
Když píšeme self.napln, myslíme tím právě tu náplň, kterou jsme zadali při vytváření – třeba marmeládu nebo tvaroh.
Každá várka palačinek si nese svoje vlastní údaje, a self nám pomáhá se k nim kdykoliv vrátit.
Shrnutí
- Třída je šablona - návod jak tvořit recepty na libovolné množství a náplň.
- Objekt je už vytvořený recept pro konkrétní množství a náplň.
- __init__ je jako kuchařka-pomocnice – nastaví suroviny podle počtu kusů.
- __str__ definuje, jak se třída vypíše – recept v textové podobě.
- Metody jako
osmaz_vsechnynebonamaz_vsechnydělají opakující se kroky.
Pojmy
self– odkaz na „recept na tuto konkrétní várku palačinek“def– definice metody (funkce uvnitř třídy)__init__– konstruktor (spustí se při vytvoření objektu)__str__– výstup proprint()