Что такое __slots__ в Python?

«Что такое __slots__ в Python?» — вопрос из категории Python, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

__slots__ — это механизм в Python для оптимизации памяти, ограничивающий набор атрибутов экземпляра класса. Он заменяет динамический словарь __dict__ фиксированным набором атрибутов, что уменьшает потребление памяти и ускоряет доступ к атрибутам.

Пример:

class User:
    __slots__ = ['name', 'age']  # Фиксированные атрибуты

    def __init__(self, name, age):
        self.name = name
        self.age = age

user = User("Alice", 30)
print(user.name)  # Alice
# user.email = "alice@example.com"  # Вызовет AttributeError (атрибут не в __slots__)

Плюсы:

  • Экономия памяти (особенно полезно для создания множества экземпляров).
  • Более быстрый доступ к атрибутам.

Минусы:

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