__slots__ заключается в том, что они не могут динамически получать произвольные атрибуты. Однако можно совместить подход с __slots__ и обычным __dict__.Чтобы включить возможность динамического присваивания атрибутов объекту, просто добавьте
'__dict__' в __slots__:
class A:
__slots__ = ('a', 'b', '__dict__')
A().x = 3
Также учтите, что наследуемые классы автоматически получают
__dict__, если явно не указаны пустые __slots__:
class A:
__slots__ = ('a', 'b')
class B(A):
pass
B().x = 3
👉@BookPython