@dataclass — это декоратор из модуля dataclasses, который автоматически генерирует специальные методы, такие как __init__, __repr__, __eq__ и другие, для классов, предназначенных для хранения данных. Это значительно упрощает создание классов-контейнеров для данных.
Пример:
python
Основные преимущества:
init=False, repr=False и т.д.)Недостатки (в сравнении с namedtuple):
@dataclass, мутабельны по умолчанию, если поля не объявлены как field(frozen=True).namedtuple.Параметры декоратора @dataclass(...):
| Параметр | Описание | По умолчанию |
|---|---|---|
init | Генерировать ли метод __init__(). | True |
repr | Генерировать ли метод __repr__(). | True |
eq | Генерировать ли метод __eq__(). | True |
order | Генерировать ли методы сравнения (__lt__, __le__, __gt__, __ge__). | False |
unsafe_hash | Форсировать ли генерацию __hash__(). Используется с осторожностью. | False |
frozen | Сделать ли экземпляр неизменяемым (попытки присвоения вызовут исключение). | False |
Поля также могут быть определены с использованием функции field() из того же модуля для задания дополнительных параметров, например, значений по умолчанию, метаданных или для исключения поля из автоматически генерируемых методов.
python
@dataclass — это современный и предпочтительный способ создания простых классов для хранения данных в Python 3.7+.