Вопрос проверяет понимание внутреннего устройства объектов Python и способов оптимизации памяти.
__slots__ ограничивают набор атрибутов объекта и убирают __dict__. Это снижает потребление памяти и ускоряет доступ к атрибутам. При этом объект теряет динамичность — нельзя добавлять новые атрибуты. Использовать __slots__ стоит для большого количества однотипных объектов. Это осознанный компромисс между гибкостью и эффективностью.
По умолчанию каждый объект Python хранит атрибуты в словаре, что удобно, но не всегда эффективно.
__slots__ — это механизм ограничения допустимых атрибутов объекта и замены __dict__ на более компактное представление.
__slots__Перед рассмотрением эффектов важно понять базовую механику:
Без __slots__
у объекта есть __dict__
можно динамически добавлять атрибуты
выше потребление памяти
С __slots__
атрибуты фиксированы
__dict__ отсутствует
память выделяется компактно
class Point:
__slots__ = ("x", "y")
def __init__(self, x, y):
self.x = x
self.y = y
Попытка добавить point.z = 10 приведёт к ошибке.
Плюсы:
экономия памяти
ускорение доступа к атрибутам
Минусы:
потеря гибкости
сложнее расширять классы
__slots__ оправданы в high-load системах и при массовом создании объектов с фиксированной структурой.