Preskoči na glavni sadržaj
Osnove Pythona2026-07-29 · 12 min čitanja

Python klase i objekti: Vodič za 2026

Većina Python OOP tutorijala uči sintaksu i preskače mentalni model. Ovaj radi suprotno — otići ćete s jasnom slikom o tome što klasa je tijekom izvođenja, kada posegnuti za @dataclass umjesto da ručno pišete __init__ i kako self stvarno funkcionira (nije magija).

Pokrit ćemo: minimalnu održivu klasu od četiri retka, zašto je self parametar, atribute klase u odnosu na instancu (pogreška broj 1 za početnike), šest dunder metoda koje ćete vidjeti posvuda, @dataclass kao modernu zadanu vrijednost i čvrsto pravilo kada ostaviti klase same i koristiti običnu funkciju.

Mentalni model: klasa je tvornica

Klasa u Pythonu je tvornica koja proizvodi objekte. Svaki put kada pozovete Rect(3, 4), Python stvara svježi objekt s vlastitom pohranom i vraća vam ga.

▶ PYTHONeditable · runs in your browser

To je cijela mehanika. Klasa je nacrt; svaki poziv Rect(...) je pečat nacrta u novi RAM.

self je samo parametar

Zabuna broj 1 za ljude koji dolaze iz JS-a ili Rubyja: self u Pythonu je eksplicitan. Prvi parametar svake metode je referenca na instancu koja se poziva.

▶ PYTHONeditable · runs in your browser

Dakle, c.bump() je sintaktički šećer za Counter.bump(c). Python prosljeđuje instancu kao prvi argument. Mogli biste to nazvati "ja", "ovo" ili "fuj" - "ja" je konvencija, a ne ključna riječ. Držite se `self' (PEP 8) kako bi drugi programeri Pythona mogli čitati vaš kod.

Zamka atributa klase protiv instance

Najčešći Python OOP bug u bazi koda za početnike:

▶ PYTHONeditable · runs in your browser

items = [] u opsegu klase stvara JEDAN popis koji dijeli svaka instanca. a.add("milk") ga mijenja, tako da b.items vidi isti popis.

Pravilo: inicijalizirajte promjenjivo stanje u `__init__`, ne u opsegu klase.

▶ PYTHONeditable · runs in your browser

Ova je pogreška otpremljena u proizvodnju više puta nego što će bilo koji programer Pythona priznati. Pazite na popise, diktate, skupove u opsegu klase.

Šest metoda koje ćete vidjeti posvuda

Dunderove metode (__name__) su Pythonove zakačke za preopterećenje operatora. Ovih šest pokriva 95% onoga s čime ćete se susresti:

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

Pokreće se kada je objekt kreiran. Ovdje postavite atribute instance. Ne vraćaj ništa (Python nameće Ništa).

2. __repr__(self) — niz usmjeren prema razvojnom programeru

Poziva se print(x) ako __str__ nedostaje, i uvijek putem REPL-a. Ciljajte na nešto što biste mogli zalijepiti natrag u Python da ponovno stvorite objekt:

▶ PYTHONeditable · runs in your browser

3. __eq__(sebe, drugo) — jednakost

Bez toga, Rect(3, 4) == Rect(3, 4) vraća False (zadano je identitet). Usporedite polje po polje:

▶ PYTHONeditable · runs in your browser

4. __hash__(self) — mogućnost raspršivanja

Ako nadjačate __eq__, MORATE također poništiti __hash__ ili Python skupove __hash__ = None (objekt postaje nehashable). Najjednostavnije: return hash((self.width, self.height)).

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

Omogućuje rad len(cart) == 5.

6. __iter__(self) — za za x u objektu:

Vrati iterator. yield unutar čini klasu iterabilnom:

▶ PYTHONeditable · runs in your browser

@dataclass — moderna zadana vrijednost

Ako je vaša klasa uglavnom nositelj podataka (tri polja, __init__, __repr__, __eq__), prestanite pisati tu šablonu. @dataclass generira sve iz vaših napomena tipa:

▶ PYTHONeditable · runs in your browser

Generiraju se __init__, __repr__ i __eq__. Dodajte @dataclass(frozen=True) da biste objekt učinili nepromjenjivim I dobili __hash__ besplatno.

Pravilo: prvo posegnite za `@dataclass`. Napišite ručno izrađenu klasu samo kada trebate metode koje nisu pristupnici atributima.

__slots__ — optimizacija memorije (napredno)

Prema zadanim postavkama svaka instanca nosi __dict__ tako da možete dodati proizvoljne atribute. __slots__ zamjene koje diktiraju za fiksnu strukturu C-razine — manji RAM otisak i brži pristup atributima:

▶ PYTHONeditable · runs in your browser

Upotrijebite __slots__ kada: (a) stvarate milijune instanci i RAM je važan, ili (b) želite uhvatiti dodjelu atributa tipfelera tijekom izvođenja. Inače ga preskočite — onemogućuje pickle prema zadanim postavkama i prekida višestruko nasljeđivanje na suptilan način.

Kada ostaviti nastavu na miru

Čvrsto pravilo: ako vaša klasa ima JEDNU metodu plus `__init__`, to bi vjerojatno trebala biti funkcija.

▶ PYTHONeditable · runs in your browser

Klase dobivaju svoju težinu kada drže state u više poziva metoda ili kada implementiraju dobro definiran protokol (__iter__, __enter__, __eq__, itd.). Jednokratna logika je funkcija.

Nasljeđe — koristite ga štedljivo

Nasljeđe je stvarno, ali se previše koristi. U Pythonu 2026 preferirajte kompoziciju — držite drugi objekt kao atribut umjesto nasljeđivanja od njega:

▶ PYTHONeditable · runs in your browser

Nasljeđujte samo kada imate istinski odnos "je-jeste" I želite nadjačati ponašanje. NamedRect koji nasljeđuje Rect za dodavanje polja name je u redu. Izgradnja hijerarhije nasljeđivanja od pet razina za klasu poslovne logike kod je koji ćete razmrsiti za 6 mjeseci.


Klase su jedna od najmoćnijih značajki Pythona i jedna od najlakših za prekomjernu upotrebu. Mentalni model koji pomaže: klasa je tvornica za objekte, "self" je običan parametar, promjenjivo stanje ide u "__init__", prvo posegnite za "@dataclass" i vratite se na funkciju kad god klasa ima manje od dvije metode za prijenos stanja.

Sljedeći korak: 30 praktičnih OOP lekcija koje pokrivaju klase, @dataclass, nasljeđivanje u odnosu na kompoziciju i dunder metode — sa pravim Pythonom koji radi u vašem pregledniku i AI mentorom na svakom koraku.

Jeste li spremni isprobati?

15 besplatne lekcije nakon besplatne prijave — bez kartice. Isprobajte platformu, a zatim odlučite.

Počni besplatno →

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.