Dataclass, NamedTuple или обычный класс в Python
Уроки курсаDataclass, NamedTuple или обычный класс в Python
Чем отличается NamedTuple
typing.NamedTuple создаёт неизменяемый tuple-подобный объект с именованными полями. Он поддерживает распаковку и индексацию, поэтому удобен на границе со старым кодом, ожидающим кортеж. Но tuple-семантика иногда вредна: два разных типа NamedTuple с одинаковыми значениями могут сравниваться как равные последовательности.
Обычный класс лучше, когда создание объекта должно строго проверять инварианты, есть сложное наследование или публичный конструктор не совпадает с набором хранимых полей. Dataclass тоже поддерживает __post_init__, но не стоит превращать его в скрытую фабрику со множеством побочных эффектов.
Словарь остаётся подходящим для действительно динамической схемы. Если набор ключей стабилен и значим для домена, отдельный тип обычно улучшает подсказки IDE и рефакторинг.
