Python для продвинутых: ООП, типизация и тестированиеОткрытые материалыDataclass, NamedTuple или обычный класс в Python

Dataclass, NamedTuple или обычный класс в Python

Уроки курсаDataclass, NamedTuple или обычный класс в Python

Практический выбор

Используйте dataclass для внутренних value objects и DTO, когда поля известны, нужны понятный repr и сравнение. Используйте frozen dataclass для значений, которые не должны меняться после создания. NamedTuple уместен для компактной неизменяемой записи с необходимой совместимостью с tuple.

Аннотации dataclass сами по себе не валидируют типы во время выполнения. Передача строки в поле float не вызовет автоматическую ошибку. Для внешнего недоверенного ввода нужен отдельный валидатор или модель данных с runtime-проверкой.

Не выбирайте структуру только по числу строк кода. Важнее семантика: можно ли менять объект, должен ли он быть hashable, нужна ли tuple-совместимость и где проверяются инварианты.