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

Как меняется поведение класса после определения __slots__

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

  1. Экономия памяти - экземпляры хранят атрибуты в фиксированном массиве вместо __dict__, что уменьшает их размер
  2. Быстрый доступ - доступ к атрибутам становится немного быстрее
  3. Запрет динамических атрибутов - нельзя добавлять новые атрибуты, не указанные в __slots__

Пример:

python
class Point:
    __slots__ = ('x', 'y')
    
    def __init__(self, x, y):
        self.x = x
        self.y = y

p = Point(1, 2)
p.z = 3  # AttributeError: 'Point' object has no attribute 'z'

Важно: __slots__ наследуется, но если дочерний класс не определит свои __slots__, у него будет __dict__ и можно добавлять атрибуты. Для полного запрета нужно явно указать __slots__ = () в дочернем классе.

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

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

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

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