Выбор ответа Middle ООП и dataclasses обновлено

Что дают __slots__

Вопрос

Что делает __slots__ = ("x", "y") в классе?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Убирает dict: меньше памяти, но новых атрибутов нет. Со slots атрибуты хранятся в фиксированных ячейках, а не в словаре экземпляра.

Варианты ответа

  1. Делает атрибуты x и y неизменяемыми после __init__
  2. Ограничивает число экземпляров класса двумя слотами
  3. Убирает __dict__: меньше памяти, но новых атрибутов нетправильный ответ
  4. Ускоряет создание класса, а не экземпляров

Разбор

Со __slots__ атрибуты хранятся в фиксированных ячейках, а не в словаре экземпляра. Это заметно экономит память на миллионах объектов и чуть ускоряет доступ. Цена: obj.z = 1 бросит AttributeError, а наследники без своих __slots__ снова получат __dict__. Неизменяемость даёт frozen=True у dataclass, а не слоты.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме