Sobes.tech
Back to questions
Junior — Middle
60

Как использование атрибута __slots__ влияет на поведение и производительность классов в Python?

Answer from AI

sobes.tech AI

Атрибут __slots__ в Python используется для ограничения набора атрибутов экземпляров класса и оптимизации использования памяти.

По умолчанию у каждого объекта есть словарь __dict__, где хранятся все атрибуты. Это гибко, но занимает память.

Если определить __slots__ в классе, Python создаст фиксированный набор атрибутов, и не будет создавать __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

Таким образом, __slots__ полезен для оптимизации, когда известен фиксированный набор атрибутов.