Přejít k hlavnímu obsahu
Základy Pythonu2026-07-29 · 12 min čtení

Třídy a objekty Pythonu: Výukový program 2026

Většina Python OOP tutoriálů učí syntaxi a přeskakuje mentální model. Tenhle dělá pravý opak – odcházíte s jasnou představou o tom, co je třída za běhu, kdy sáhnout po @dataclass místo ručního psaní __init__ a jak self skutečně funguje (není to kouzlo).

Probereme: čtyřřádkovou minimální životaschopnou třídu, proč je self parametrem, atributy třídy vs. instance (chyba pro začátečníky č. 1), šest dunderových metod, které uvidíte všude, @dataclass jako moderní výchozí nastavení a tvrdé pravidlo, kdy nechat třídy na pokoji a použít obyčejnou funkci.

Mentální model: třída je továrna

Třída v Pythonu je továrna, která produkuje objekty. Pokaždé, když zavoláte Rect(3, 4), Python vytvoří nový objekt s vlastním úložištěm a předá vám ho zpět.

▶ PYTHONeditable · runs in your browser

To je celý mechanik. Třída je plán; každé volání Rect(...) je razítkem plánu do čerstvé paměti RAM.

self je jen parametr

Zmatek č. 1 pro lidi pocházející z JS nebo Ruby: self v Pythonu je explicitní. První parametr každé metody je odkaz na volanou instanci.

▶ PYTHONeditable · runs in your browser

Takže c.bump() je syntaktický cukr pro Counter.bump(c). Python předá instanci jako první argument. Dalo by se to nazvat „já“, „toto“ nebo „foo“ – „já“ je konvence, nikoli klíčové slovo. Držte se self (PEP 8), aby ostatní vývojáři Pythonu mohli číst váš kód.

Past atributu třídy vs. instance

Nejběžnější chyba Python OOP v kódové základně pro začátečníky:

▶ PYTHONeditable · runs in your browser

items = [] v rozsahu třídy vytvoří JEDEN seznam sdílený každou instancí. a.add("milk") jej zmutuje, takže b.items vidí stejný seznam.

Pravidlo: inicializujte proměnlivý stav v `__init__`, nikoli v rozsahu třídy.

▶ PYTHONeditable · runs in your browser

Tato chyba byla odeslána do produkce vícekrát, než kterýkoli vývojář Pythonu připustí. Sledujte seznamy, diktáty, sady v rozsahu třídy.

Šest metod, které uvidíte všude

Metody Dunder (__name__) jsou háky přetěžující operátory Pythonu. Těchto šest pokrývá 95 % toho, s čím se setkáte:

1. __init__(self, ...) — konstruktor

Spustí se při vytvoření objektu. Zde nastavte atributy instance. Nic nevracejte (Python vynucuje None).

2. __repr__(self) — řetězec pro vývojáře

Volá se pomocí print(x), pokud __str__ chybí, a vždy pomocí REPL. Zaměřte se na něco, co byste mohli vložit zpět do Pythonu a znovu vytvořit objekt:

▶ PYTHONeditable · runs in your browser

3. __eq__(já, jiný) — rovnost

Bez něj vrátí Obdélník(3, 4) == Obdélník(3, 4) False (výchozí je identita). Porovnat pole po poli:

▶ PYTHONeditable · runs in your browser

4. __hash__(self) — hašovatelnost

Pokud přepíšete __eq__, MUSÍTE také přepsat __hash__ nebo sady Pythonu __hash__ = Žádný (objekt se stane nehašovatelným). Nejjednodušší: return hash((self.width, self.height)).

5. __len__(self) — pro len(obj)

Funguje len(cart) == 5.

6. __iter__(self) — pro for x v obj:

Vraťte iterátor. yield uvnitř dělá třídu iterovatelnou:

▶ PYTHONeditable · runs in your browser

@dataclass — moderní výchozí nastavení

Pokud je vaše třída většinou držitelem dat (tři pole, __init__, __repr__, __eq__), přestaňte psát tento vzor. @dataclass to vše vygeneruje z vašich typových anotací:

▶ PYTHONeditable · runs in your browser

To jsou všechny vygenerované __init__, __repr__ a __eq__. Přidejte @dataclass(frozen=True), aby byl objekt neměnný A získejte __hash__ zdarma.

Pravidlo: nejprve sáhněte po `@dataclass`. Ručně vytvořenou třídu napište pouze v případě, že potřebujete metody, které nejsou přístupovými objekty atributů.

__slots__ — optimalizace paměti (pokročilé)

Ve výchozím nastavení každá instance nese __dict__, takže můžete přidat libovolné atributy. __slots__ swapy, které diktují pevnou strukturu na úrovni C – menší nároky na RAM a rychlejší přístup k atributům:

▶ PYTHONeditable · runs in your browser

__slots__ použijte, když: (a) vytváříte miliony instancí a záleží na paměti RAM nebo (b) chcete zachytit překlepy přiřazené atributy za běhu. V opačném případě to přeskočte – ve výchozím nastavení deaktivuje pickle a rafinovaným způsobem přeruší vícenásobnou dědičnost.

Kdy opustit vyučování o samotě

Tvrdé pravidlo: pokud má vaše třída JEDNU metodu plus `__init__`, měla by to být pravděpodobně funkce.

▶ PYTHONeditable · runs in your browser

Třídy získávají svou váhu, když drží stav napříč více voláními metod nebo když implementují dobře definovaný protokol (__iter__, __enter__, __eq__ atd.). Jednorázová logika je funkce.

Dědičnost — používejte ji střídmě

Dědičnost je skutečná, ale nadměrně využívaná. V 2026 Pythonu upřednostňujte složení — držte jiný objekt jako atribut namísto zdědění z něj:

▶ PYTHONeditable · runs in your browser

Dědit pouze v případě, že máte skutečný vztah „je-a“ A chcete potlačit chování. NamedRect, který zdědí z Rect pro přidání pole name je v pořádku. Vytvoření pětiúrovňové hierarchie dědičnosti pro třídu obchodní logiky je kód, který rozmotáte za 6 měsíců.


Třídy jsou jednou z nejvýkonnějších funkcí Pythonu a jednou z nejjednodušších k nadměrnému používání. Mentální model, který pomáhá: třída je továrna na objekty, self je prostý parametr, proměnlivý stav přechází v __init__, nejprve sáhněte po @dataclass a přejděte zpět na funkci, kdykoli má třída méně než dvě metody přenášející stav.

Další krok: 30 praktických lekcí OOP zahrnující třídy, @dataclass, dědičnost vs složení a dunderovy metody – se skutečným Pythonem běžícím ve vašem prohlížeči a mentorem AI na každém kroku.

Jste připraveni to vyzkoušet?

15 lekcí zdarma po bezplatné registraci – žádná karta. Vyzkoušejte platformu a pak se rozhodněte.

Začněte zdarma →

Or unlock every lesson

Pro — $12/mo, unlimited AI, cancel any time. Refund within 14 days worldwide.

See Pro plans →

Get one Python lesson + one career idea every Friday

No spam, no "buy our course now". Three bullets, every Friday. Unsubscribe with one click.