Python: dataclass
Коротко: @dataclass автоматически создаёт __init__, __repr__ и сравнения для класса, который в основном хранит данные. Это экономит много шаблонного кода.
Подробнее: Вместо ручного написания конструктора и текстового представления достаточно перечислить поля с типами.
Подробности
from dataclasses import dataclass, field
@dataclass
class Product:
name: str
price: float
tags: list[str] = field(default_factory=list)- Автоматически:
Product("Кружка", 4.5)работает,print(p)показываетProduct(name='Кружка', price=4.5, tags=[]),==сравнивает поле за полем. - Значения по умолчанию: Изменяемые значения по умолчанию (списки, словари) никогда не задавать напрямую, а через
field(default_factory=list). - Параметры:
frozen=Trueделает объекты неизменяемыми и хэшируемыми,order=Trueсоздаёт сравнения для сортировки,slots=Trueэкономит память. __post_init__: Выполняется после конструктора, например для проверок или производных полей.- Помощники:
asdict(p)иreplace(p, price=5)(копия с изменением). - Сравнение:
NamedTupleнеизменяем и похож на кортеж, уdictнет фиксированной структуры, Pydantic дополнительно проверяет во время выполнения.
См. также: аннотации типов