Sobes.tech
Back to questions
Junior — Middle
68

Объясните назначение и принцип работы атрибута __slots__ в Python.

Answer from AI

sobes.tech AI

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

  • Экономить память, так как не создаётся словарь __dict__ для каждого объекта.
  • Немного ускорить доступ к атрибутам.

Принцип работы:

При объявлении __slots__ в классе вы указываете фиксированный набор имен атрибутов. Python создаёт для них специальное внутреннее хранилище, вместо обычного словаря.

Пример:

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

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

p = Point(1, 2)
print(p.x, p.y)  # 1 2

# p.z = 3  # Ошибка: нельзя добавить атрибут, не указанный в __slots__

Ограничения:

  • Нельзя динамически добавлять новые атрибуты, не указанные в __slots__.
  • Не подходит, если нужен гибкий набор атрибутов.
  • Не совместим с некоторыми механизмами наследования, если не учитывать __slots__ в подклассах.

Используется для оптимизации в случаях, когда создаётся много объектов с фиксированным набором атрибутов.