Protože Python je objektově oriemtovaný, dynamický programovací jazyk, projde vám tato konstrukce:
Byť v konstruktoru v definici třídy inicializuji jen atrribut jmeno
, skrze konstrukci self.jmeno = jmeno
, mohu pak do objektu pepa vesele přidávat další adributy.
A to díky díky implementaci atributů třídy skrze interní proměnou __dict__
která formou slovníku sdružuje všechny atributy daného konkrétního objektu.
Od verze 3.6 můžete pomocí __slots__
definovat seznam povolených klíčů, atributů a zaříznout tak možnost vytvářet v objentu dané třídy nežádoucí, nebo prostě všechny nedefinované atributy.
Proč?
No minimálně ze dvou důvodů.
- rychlost: práce se __slots__ zjednodušuje Pythonu přístup k atributům a tedy jej činí rychlejším
- paměťová náročnost: díky tomu, že interpret zná všechny atributy, může efektivněji inicializovat jednotlivé nově vzniklé objekty
A pak se vám bude lépe kódovat např v MS Visual Codu, protože linter na vás bude řvát, že „Instance of ‚Osoba‘ has no ‚plat‘ member“