Питхон класе и објекти: Водич за 2026
Већина Питхон ООП туторијала подучава синтаксу и прескаче ментални модел. Овај ради супротно — оставићете јасну слику о томе шта је класа * у току извођења, када треба посегнути за @dataclass уместо да ручно пишете __init__ и како self заиста функционише (то није магија).
Покрићемо: минималну одрживу класу у четири реда, зашто је self параметар, атрибуте класе наспрам инстанце (грешка за почетнике број 1), шест дундер метода које ћете видети свуда, @dataclass као модерно подразумевано и чврсто правило када оставити класе на миру и користити обичну функцију.
Ментални модел: класа је фабрика
Класа у Питхон-у је фабрика која производи објекте. Сваки пут када позовете Rect(3, 4), Питхон креира нови објекат са сопственим складиштем и враћа вам га назад.
То је цео механичар. Класа је нацрт; сваки позив Rect(...) је печат нацрта у свежу РАМ меморију.
self је само параметар
Забуна број 1 за људе који долазе из ЈС-а или Руби-ја: self у Питхон-у је експлицитна. Први параметар сваке методе је референца на инстанцу која се позива.
Дакле, c.bump() је синтаксички шећер за Counter.bump(c). Питхон прослеђује инстанцу као први арг. Могли бисте то назвати me, this или foo — self је конвенција, а не кључна реч. Држите се self (ПЕП 8) како би други Питхон програмери могли да прочитају ваш код.
Замка атрибута класе и инстанце
Најчешћа Питхон ООП грешка у бази кода за почетнике:
items = [] у опсегу класе креира ЈЕДНУ листу коју дели свака инстанца. a.add("milk") га мутира, тако да b.items види исту листу.
Правило: иницијализујте променљиво стање у `__init__`, а не у опсегу класе.
Ова грешка је испоручена у производњу више пута него што ће било који Питхон програмер признати. Пазите на листе, диктате, скупове у обиму класе.
Шест метода које ћете видети свуда
Дундер методе (__name__) су закачице за преоптерећење Питхон оператора. Ових шест покрива 95% онога што ћете наићи:
1. __init__(self, ...) — конструктор
Покреће се када се објекат креира. Овде поставите атрибуте инстанце. Не враћајте ништа (Питхон намеће None).
2. __repr__(self) — стринг окренут програмеру
Позива се помоћу print(x) ако недостаје __str__ и увек од РЕПЛ-а. Циљајте на нешто што бисте могли да залепите назад у Питхон да бисте поново креирали објекат:
3. __eq__(self, other) — једнакост
Без тога, Rect(3, 4) == Rect(3, 4) враћа False (подразумевано је идентитет). Упоредите поље по поље:
4. __hash__(self) — хешабилност
Ако заобиђете __eq__, МОРАТЕ такође надјачати __hash__ или Питхон скупове __hash__ = None (објекат постаје нехешљив). Најједноставнији: return hash((self.width, self.height)).
5. __len__(self) — за len(obj)
Чини да len(cart) == 5 ради.
6. __iter__(self) — за for x in obj:
Врати итератор. yield изнутра чини класу итеративном:
@dataclass — модерно подразумевано
Ако је ваша класа углавном држалац података (три поља, __init__, __repr__, __eq__), престаните да пишете тај шаблон. @dataclass све то генерише из напомена вашег типа:
То је __init__, __repr__ и __eq__ све генерисано. Додајте @dataclass(frozen=True) да бисте учинили објекат непроменљивим И добили __hash__ бесплатно.
Правило: прво посегните за `@dataclass`. Напишите ручно урађену класу само када су вам потребне методе које нису приступници атрибута.
__slots__ — оптимизација меморије (напредно)
Подразумевано свака инстанца носи __dict__ тако да можете додати произвољне атрибуте. __slots__ замењује тај дикт за фиксну структуру Ц-нивоа — мањи отисак РАМ-а и бржи приступ атрибутима:
Користите __slots__ када: (а) креирате милионе инстанци и РАМ-а, или (б) желите да ухватите доделу атрибута за време извођења. У супротном га прескочите — подразумевано онемогућава кисели краставчић и разбија вишеструко наслеђе на суптилне начине.
Када оставити часове на миру
Чврсто правило: ако ваша класа има ЈЕДАН метод плус `__init__`, то би вероватно требало да буде функција.
Класе добијају своју тежину када држе стате у вишеструким позивима метода или када имплементирају добро дефинисан протокол (__iter__, __enter__, __eq__, итд.). Једнократна логика је функција.
Наслеђе — користите га штедљиво
Наслеђе је стварно, али се превише користи. У 2026 Питхон-у, преферирајте композицију — држите други објекат као атрибут уместо да га наслеђујете:
Наслеђујте само када имате истинску „је-а“ везу И желите да надјачате понашање. NamedRect који наслеђује од Rect да би додао поље name је у реду. Изградња петостепене хијерархије наслеђивања за класу пословне логике је код који ћете распетљати за 6 месеци.
Класе су једна од најмоћнијих функција Питхон-а и једна од најлакших за прекомерну употребу. Ментални модел који помаже: класа је фабрика за објекте, self је обичан параметар, променљиво стање иде у __init__, прво посегните за @dataclass и вратите се на функцију кад год класа има мање од две методе које носе стање.
Следећи корак: 30 практичних ООП лекција које покривају класе, @dataclass, наслеђивање против композиције и методе дундера — са правим Питхон-ом који ради у вашем претраживачу и АИ ментором на сваком кораку.