Пропуски 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 ошибок.

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