Выбор ответа Junior ООП и dataclasses спрашивают часто обновлено
Список по умолчанию в dataclass
Вопрос
Что произойдёт при определении @dataclass class Order: items: list = []?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: ValueError при создании класса, нужен defaultfactory. dataclass специально запрещает изменяемые значения по умолчанию list, dict, set и бросает ValueError: mutable default ... use defaultfactory.
Варианты ответа
- Все заказы получат общий список, как с аргументом функции
- dataclass сам скопирует список для каждого экземпляра
ValueErrorпри создании класса, нуженdefault_factoryправильный ответ- Поле станет необязательным и равным
None
Разбор
dataclass специально запрещает изменяемые значения по умолчанию list, dict, set и бросает ValueError: mutable default ... use default_factory. Это защита от ловушки общего списка. Правильно: items: list = field(default_factory=list). Автоматического копирования нет, None тоже не подставляется.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Класс Vector с магическими методами
Следующий вопрос
Приоритет дескрипторов и словаря экземпляра