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 додатково перевіряє під час виконання.
Див. також: анотації типів