Выбор ответа Junior ООП и dataclasses спрашивают часто обновлено

Список по умолчанию в dataclass

Вопрос

Что произойдёт при определении @dataclass class Order: items: list = []?

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

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

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

Коротко

Правильный ответ: ValueError при создании класса, нужен defaultfactory. dataclass специально запрещает изменяемые значения по умолчанию list, dict, set и бросает ValueError: mutable default ... use defaultfactory.

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

  1. Все заказы получат общий список, как с аргументом функции
  2. dataclass сам скопирует список для каждого экземпляра
  3. ValueError при создании класса, нужен default_factoryправильный ответ
  4. Поле станет необязательным и равным None

Разбор

dataclass специально запрещает изменяемые значения по умолчанию list, dict, set и бросает ValueError: mutable default ... use default_factory. Это защита от ловушки общего списка. Правильно: items: list = field(default_factory=list). Автоматического копирования нет, None тоже не подставляется.

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

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

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