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

В чем разница между классом у которого есть slots и у которого нету

Основное отличие классов со __slots__ и без — в способе хранения атрибутов экземпляров.

  • Без __slots__
    Атрибуты хранятся в динамическом словаре __dict__, что позволяет добавлять новые атрибуты на лету, но потребляет больше памяти.

  • Со __slots__
    Атрибуты фиксированы, __dict__ не создается, что экономит память и ускоряет доступ к атрибутам. Однако нельзя добавлять новые атрибуты вне __slots__.

python
class WithoutSlots:
    pass

obj1 = WithoutSlots()
obj1.new_attr = 42  # OK

class WithSlots:
    __slots__ = ['x']

obj2 = WithSlots()
obj2.x = 42  # OK
obj2.y = 10  # AttributeError

Плюсы __slots__:

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

Минусы:

  • Нельзя динамически добавлять атрибуты.
  • Несовместимость с некоторыми инструментами (например, pickle без __getstate__).
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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