Sobes.tech
Назад к вопросам
Junior — Middle
50

Что происходит с механизмом работы класса в Python после объявления __slots__?

Ответ от нейросети

sobes.tech AI

После объявления в классе атрибута __slots__ Python перестаёт использовать стандартный словарь __dict__ для хранения атрибутов экземпляров. Вместо этого выделяется фиксированный набор атрибутов, указанных в __slots__, которые хранятся в более компактной структуре. Это приводит к снижению потребления памяти и ускорению доступа к атрибутам, но накладывает ограничения: нельзя динамически добавлять новые атрибуты, не указанные в __slots__, и класс не будет иметь атрибут __dict__ (если явно не добавить его в __slots__).

Пример:

class Point:
    __slots__ = ('x', 'y')

    def __init__(self, x, y):
        self.x = x
        self.y = y

p = Point(1, 2)
p.x = 10  # работает
# p.z = 5  # вызовет AttributeError, так как 'z' не в __slots__