Prejsť na hlavný obsah
Základy jazyka Python2026-07-29 · 12 min čítania

Triedy a objekty Pythonu: Návod na rok 2026

Väčšina tutoriálov Python OOP učí syntax a preskakuje mentálny model. Toto robí opak – odídete s jasným obrazom toho, čo trieda je za behu, kedy siahnuť po @dataclass namiesto ručného písania __init__ a ako self skutočne funguje (nie je to mágia).

Pokryjeme: štvorriadkovú minimálnu životaschopnú triedu, prečo je self parametrom, atribúty triedy vs inštancie (chyba č. 1 pre začiatočníkov), šesť dunderových metód, ktoré uvidíte všade, @dataclass ako modernú predvolenú hodnotu a tvrdé pravidlo, kedy nechať triedy na pokoji a použiť obyčajnú funkciu.

Mentálny model: trieda je továreň

Trieda v Pythone je továreň, ktorá produkuje objekty. Zakaždým, keď zavoláte Rect(3, 4), Python vytvorí nový objekt s vlastným úložiskom a odovzdá vám ho späť.

▶ PYTHONeditable · runs in your browser

To je celý mechanik. Trieda je plán; každé volanie Rect(...) je pečiatkou plánu do čerstvej pamäte RAM.

„ja“ je len parameter

Zmätok č. 1 pre ľudí pochádzajúcich z JS alebo Ruby: „ja“ v Pythone je explicitný. Prvý parameter každej metódy je odkaz na volanú inštanciu.

▶ PYTHONeditable · runs in your browser

Takže c.bump() je syntaktický cukor pre Counter.bump(c). Python odovzdá inštanciu ako prvý argument. Môžete to nazvať „ja“, „toto“ alebo „foo“ – „ja“ je konvencia, nie kľúčové slovo. Držte sa self (PEP 8), aby ostatní vývojári Pythonu mohli čítať váš kód.

Pasca atribútu triedy verzus inštancia

Najbežnejšia chyba Python OOP v kódovej základni pre začiatočníkov:

▶ PYTHONeditable · runs in your browser

items = [] v rozsahu triedy vytvorí JEDEN zoznam zdieľaný každou inštanciou. a.add("milk") ho zmutuje, takže b.items vidí rovnaký zoznam.

Pravidlo: inicializujte premenlivý stav v `__init__`, nie v rozsahu triedy.

▶ PYTHONeditable · runs in your browser

Táto chyba bola odoslaná do produkcie viackrát, ako si ktorýkoľvek vývojár Pythonu pripustí. Sledujte zoznamy, diktáty, súbory v rozsahu triedy.

Šesť metód, ktoré uvidíte všade

Metódy Dunder (__name__) sú háky preťaženia operátorov Pythonu. Týchto šesť pokrýva 95 % toho, s čím sa stretnete:

1. __init__(self, ...) — konštruktor

Spustí sa pri vytvorení objektu. Tu nastavte atribúty inštancie. Nič nevracajte (Python vynucuje None).

2. __repr__(self) — reťazec pre vývojárov

Volá ho print(x), ak __str__ chýba, a vždy REPL. Zamerajte sa na niečo, čo by ste mohli vložiť späť do Pythonu, aby ste znova vytvorili objekt:

▶ PYTHONeditable · runs in your browser

3. __eq__(self, other) — rovnosť

Bez nej vráti Obdĺžnik(3, 4) == Obdĺžnik(3, 4) False (predvolená je identita). Porovnajte pole po poli:

▶ PYTHONeditable · runs in your browser

4. __hash__(self) — hašovateľnosť

Ak prepíšete __eq__, MUSÍTE prepísať aj __hash__ alebo množiny Pythonu __hash__ = None (objekt sa stane nehašovateľným). Najjednoduchšie: return hash((self.width, self.height)).

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

Funguje len(cart) == 5.

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

Vráťte iterátor. yield vo vnútri robí triedu iterovateľnou:

▶ PYTHONeditable · runs in your browser

@dataclass — moderné predvolené nastavenie

Ak je vaša trieda väčšinou držiteľom údajov (tri polia, __init__, __repr__, __eq__), prestaňte písať tento štandardný kód. @dataclass to všetko vygeneruje z vašich anotácií typu:

▶ PYTHONeditable · runs in your browser

To sú všetky vygenerované __init__, __repr__ a __eq__. Pridajte @dataclass(frozen=True), aby sa objekt stal nemenným A získajte __hash__ zadarmo.

Pravidlo: najprv siahnite po `@dataclass`. Ručne valcovanú triedu napíšte iba vtedy, keď potrebujete metódy, ktoré nie sú prístupovými objektmi atribútov.

__slots__ — optimalizácia pamäte (pokročilé)

Štandardne každá inštancia nesie __dict__, takže môžete pridať ľubovoľné atribúty. __slots__ swapy, ktoré diktujú pevnú štruktúru na úrovni C – menšie nároky na RAM a rýchlejší prístup k atribútom:

▶ PYTHONeditable · runs in your browser

__slots__ použite, keď: (a) vytvárate milióny inštancií a záleží na RAM, alebo (b) chcete zachytiť preklepy pri priraďovaní atribútov za behu. V opačnom prípade to preskočte – v predvolenom nastavení zakáže morenie a jemnými spôsobmi preruší viacnásobné dedičstvo.

Kedy opustiť vyučovanie sám

Tvrdé pravidlo: ak má vaša trieda JEDNU metódu plus `__init__`, pravdepodobne by to mala byť funkcia.

▶ PYTHONeditable · runs in your browser

Triedy získavajú svoju váhu, keď majú stav vo viacerých volaniach metód alebo keď implementujú dobre definovaný protokol (__iter__, __enter__, __eq__ atď.). Jednorazová logika je funkcia.

Dedičstvo — používajte ho s mierou

Dedičstvo je skutočné, ale nadmerne využívané. V 2026 Pythone uprednostňujte kompozíciu — podržte iný objekt ako atribút namiesto dedenia z neho:

▶ PYTHONeditable · runs in your browser

Deďte len vtedy, keď máte skutočný vzťah „je-a“ A chcete zmeniť správanie. Pole „NamedRect“, ktoré dedí z „Rect“ na pridanie poľa „name“, je v poriadku. Vybudovanie päťúrovňovej hierarchie dedičnosti pre triedu obchodnej logiky je kód, ktorý rozmotáte za 6 mesiacov.


Triedy sú jednou z najvýkonnejších funkcií Pythonu a jednou z najjednoduchších na nadmerné používanie. Mentálny model, ktorý pomáha: trieda je továreň na objekty, self je obyčajný parameter, premenlivý stav vstupuje do __init__, najprv siahnite po @dataclass a vráťte sa späť k funkcii vždy, keď má trieda menej ako dve metódy prenášajúce stav.

Ďalší krok: 30 praktických lekcií OOP zahŕňajúce triedy, @dataclass, dedičnosť verzus zloženie a dunderove metódy – so skutočným Pythonom spusteným vo vašom prehliadači a s mentorom AI na každom kroku.

Chcete to vyskúšať?

15 lekcií zdarma po bezplatnej registrácii – žiadna karta. Otestujte platformu a potom sa rozhodnite.

Začnite zadarmo →

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.