Пропуски Junior ООП и dataclasses обновлено
Неизменяемый dataclass со списком
Вопрос
Допишите объявление: неизменяемый и хешируемый класс с полем-списком по умолчанию.
from dataclasses import dataclass, __(1)__
@dataclass(__(2)__=True)
class Tag:
name: str
aliases: tuple[str, ...] = ()
meta: list[str] = field(__(3)__=list)
Попробуйте сами
Заполните пропуски по номерам.
1
2
3
Показать ответ и разбор
Коротко
frozen=True запрещает присваивание полей и генерирует hash. Изменяемое значение по умолчанию задаётся через field(defaultfactory=list).
Что в пропусках
1
field
2
frozen
3
default_factory
Разбор
frozen=True запрещает присваивание полей и генерирует __hash__. Изменяемое значение по умолчанию задаётся через field(default_factory=list). Заметьте: хеш замороженного класса с полем-списком упадёт при вызове hash(), потому что список не хешируем, поэтому для хешируемых полей лучше кортеж, как у aliases.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.