slots объявляет фиксированный набор атрибутов экземпляров и может уменьшить память, исключив обычный dict. Это оптимизация структуры объекта, а не средство неизменяемости.
Что такое __slots__ (магический атрибут)?
__slots__ объявляет фиксированный набор атрибутов экземпляров и может уменьшить память, исключив обычный __dict__. Это оптимизация структуры объекта, а не средство неизменяемости.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
slots объявляет фиксированный набор атрибутов экземпляров и может уменьшить память, исключив обычный dict. Это оптимизация структуры объекта, а не средство неизменяемости.
Например, __slots__ = ('x', 'y') разрешает хранить эти поля без отдельного словаря экземпляра. Чтобы разрешить произвольные дополнительные атрибуты, в slots можно включить __dict__, что меняет экономию памяти. Для weak references обычно нужен __weakref__, если он не предоставлен предком. Наследование тоже важно: наличие словаря у базового класса не исчезает автоматически. Значения объявленных полей остаются изменяемыми, если класс не вводит отдельные ограничения.