dataclass, NamedTuple или Pydantic
Вопрос
Когда вы выбираете dataclass, NamedTuple, Pydantic-модель или обычный класс?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
dataclass: внутренние структуры данных без валидации, генерирует init/repr/eq
NamedTuple: неизменяемая запись, совместимая с кортежем, распаковка
Pydantic: валидация и преобразование внешних данных (API, конфиги)
Обычный класс: богатое поведение, инварианты, нестандартная инициализация
frozen/slots ради неизменяемости и памяти
Что могут спросить следом
- Проверяет ли dataclass типы полей?
- Как сделать вычисляемое поле в dataclass?
Разбор
Образцовый ответ: «Для внутренних структур данных беру dataclass: он генерирует __init__, __repr__, __eq__, а с frozen=True и slots=True даёт неизменяемые компактные объекты. Типы в аннотациях он не проверяет, это только подсказки. NamedTuple беру, когда нужна неизменяемая запись, которая ведёт себя как кортеж: распаковка, индексы, совместимость со старым кодом, возвращающим кортежи. Для данных, приходящих снаружи, из запроса, конфига, очереди, беру Pydantic: он валидирует и приводит типы, даёт понятные ошибки и сериализацию, на нём построен FastAPI. Обычный класс пишу, когда у объекта много поведения и инвариантов, сложная инициализация или нужен контроль над атрибутами. Для вычисляемых полей в dataclass есть field(init=False) и __post_init__».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.