__slots__
zapewnia niewielką optymalizację wykorzystania pamięci, ponieważ może to zapobiec __dict__
są przydzielane do przechowywania atrybutów instancji. Może to być przydatne, jeśli masz bardzo dużą liczbę instancji.
Ograniczenie, o którym mówisz, jest głównie przypadkowym efektem ubocznym sposobu, w jaki jest wdrażane. W szczególności zatrzyma ona tworzenie tylko __dict__
, jeśli twoja klasa dziedziczy z klasy bazowej, która nie ma wartości __dict__
(takiej jak object
), a nawet wtedy nie będzie zatrzymywała się __dict__
przydzielana w żadnej z podklas, chyba że zdefiniuje również __slots__
. Nie jest to mechanizm bezpieczeństwa, więc najlepiej nie używać go jako takiego.
Wszystkie klasy w starym stylu automatycznie otrzymują __dict__
, więc __slots__
nie ma żadnego efektu. Jeśli odziedziczysz po object
, uzyskasz efekt, którego szukasz, ale w zasadzie nie przejmuj się __slots__
, dopóki nie będziesz wiedział, że masz miliony instancji, a pamięć to problem.
Działa świetnie! Dzięki! –