Встречается на собеседованиях • сегодня

Что такое __slots__

__slots__ — это специальный атрибут класса в Python, который явно определяет фиксированный набор атрибутов (полей) для его экземпляров. Это позволяет значительно оптимизировать память и ускорить доступ к атрибутам.

Для чего это нужно?

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

__slots__ заменяет __dict__ на фиксированный набор дескрипторов, экономя память и ускоряя доступ.

Пример 1. Обычный класс (без __slots__)

text
class RegularUser:
    def __init__(self, name, age):
        self.name = name
        self.age = age

user1 = RegularUser('Alice', 30)
user1.email = 'alice@mail.com'  # Можно добавить новый атрибут
print(user1.__dict__)  # {'name': 'Alice', 'age': 30, 'email': 'alice@mail.com'}

Пример 2. Класс со __slots__

text
class SlotsUser:
    __slots__ = ('name', 'age')  # Явно указываем допустимые атрибуты
    
    def __init__(self, name, age):
        self.name = name
        self.age = age

user2 = SlotsUser('Bob', 25)
# user2.email = 'bob@mail.com'  # Вызовет ошибку: AttributeError
print(user2.name)  # Работает

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

- Экономия памяти (главная причина)
Объекты со __slots__ не создают словарь __dict__, что особенно важно при создании тысяч экземпляров.

- Более быстрый доступ к атрибутам
Прямой доступ через дескрипторы работает быстрее, чем поиск в словаре.

- Защита от опечаток в именах атрибутов
Если попытаться присвоить значение несуществующему атрибуту, возникнет исключение.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы