Python: __slots__

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“