dataclasses и namedtuple используются для создания простых структур данных, где основная цель — хранить данные и обращаться к ним по имени.
Сходства:
obj.field).__repr__ (для удобного строкового представления).Отличия:
| Отличие | collections.namedtuple | dataclasses.dataclass |
|---|---|---|
| Мутабельность | Неизменяемый тип (immutable) | По умолчанию изменяемый (mutable), можно сделать неизменяемым (frozen=True) |
| Типизация | Опциональная, основана на аннотациях типов | Обязательная, основана на аннотациях типов |
| Наследование | Основан на кортеже, сложно расширять | Полноценные классы, поддерживают наследование |
| Функциональность | Только хранение данных, простой repr | Больше возможностей: автоматическоеK __init__, __eq__, __hash__, __order__, поля с значениями по умолчанию, постобработка (__post_init__) |
| Версия Python | Доступен в Python 2 и 3 | Доступен с Python 3.7 |
| Синтаксис | Функция, возвращающая класс | Декоратор @dataclass |
Примеры:
python
python