OOP … Programovací paradigma, které zapouzdřuje vlastnosti a funkcionalitu do individuálních objektů
Objekt reprezentující řetězec "Hello World", obsahuje rovněž funkcionalitu "Hello World".split()
Třídy
Vytvoření uživatelsky definovaných tříd (následně pak objektů) budeme v tuto chvíli chápat hlavně jako tvorbu vlastních datových struktur s navázanou funkcionalitou
Tuto možnost bychom měli využít pouze v případě, že již definované struktury nejsou dostatečné
Info
Třída (příkaz class) tedy slouží k vytváření uživatelsky definovaných datových struktur. Určují jak má výsledná datová struktura vypadat a fungovat. Na základě třídy (předpis) můžeme vytvářet jednotlivé instance třídy (objekty).
Např. Můžeme si představit již dobře známý seznam. Jeden konkrétní seznam je instancí (objektem) třídy seznam, která popisuje jak seznamy vypadají a fungují. Třídy jsou tedy obecným předpisem, objekty pak konkrétní entity vytvořené na základě tohoto předpisu.
Important
Třídy umisťujeme do modulů stejného názvu
Metody a vlastnosti
Funkcím které jsou s třídou úzce spjaty říkáme metody
Pro třídy i metody se používá obdobná konvence docstringů
Metoda .__init__()
Jedná se o konstruktor ⇒ nastavuje počáteční stav (initial state)
Může obsahovat libovolný počet parametrů, prvním musí však vždy být self
Vlastnosti třídy
Můžeme je využívat napříč všemi instancemi dané třídy
Přístup k vlastnostem objektu
Narozdíl od ostatních jazyků Python přistupuje k vlastnostem přímo (přes tečkovou notaci) čili nevytváříme tzv. gettery ani settery
Existuje však způsob jak udělat metody “privátní” (využíváme k rozdělení kompilkované metody do více jednodušší, do kterých však nechceme dovolit zasahovat uživateli)
Dědičnost
Jeden z hlavních konceptů OOP
Zjednodušené vysvětlení metody super() - umožňuje přístup k metodám z tříd od kterých dědíme
NamedTuple
Možnost využít pro jednodušší strukturovaná data
2. Dunder metody
Info
Dunder metody … speciální metody sloužící k implementaci podpory pro vestavěné funkce Pythonu a jinou rozšiřující funkcionalitu (např. __init__ jakožto konstruktor)