Sobes.tech
Back to questions
Junior — Middle
81

Можете ли вы объяснить назначение и применение __slots__ в Python и в чем его преимущества?

Answer from AI

sobes.tech AI

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

При объявлении __slots__ в классе, Python создаёт фиксированный набор атрибутов, исключая создание __dict__. Это уменьшает потребление памяти и ускоряет доступ к атрибутам.

Пример:

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

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

p = Point(1, 2)
# p.z = 3  # вызовет ошибку AttributeError, так как 'z' не в __slots__

Преимущества:

  • Экономия памяти, особенно при создании большого количества объектов.
  • Быстрее доступ к атрибутам.

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

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