Вопрос проверяет понимание работы __slots__ в Python при наследовании классов и их влияния на атрибуты экземпляров.
В Python __slots__ — это механизм, который позволяет ограничить набор атрибутов экземпляра класса и оптимизировать использование памяти. Однако при наследовании поведение __slots__ может быть неочевидным.
class Parent:
__slots__ = ('x', 'y')
class Child(Parent):
__slots__ = ('z',)
obj = Child()
obj.x = 1 # Работает
obj.z = 2 # Работает
# obj.w = 3 # Ошибка: нет слота 'w'
class ChildWithoutSlots(Parent):
pass
obj2 = ChildWithoutSlots()
obj2.x = 1 # Работает
obj2.w = 3 # Работает, так как есть __dict__Использование __slots__ при наследовании требует внимательного проектирования. Если вы хотите сохранить оптимизацию памяти в иерархии классов, все классы должны определять __slots__. В противном случае дочерние классы могут получить __dict__, что снижает преимущества от использования слотов.