کاهش کدهای تکراری با dataclass
بسیاری از کلاسها فقط برای نگهداری چند مقدار ساخته میشوند و شامل متدهایی مانند __init__، __repr__ و __eq__ هستند که نوشتن دستی آنها تکراری و خستهکننده است. دکوراتور @dataclass از ماژول dataclasses این متدها را بهطور خودکار میسازد.
from dataclasses import dataclass, field
@dataclass
class Product:
name: str
price: float
tags: list[str] = field(default_factory=list)
p1 = Product("لپتاپ", 25000000)
p2 = Product("لپتاپ", 25000000)
print(p1) # Product(name='لپتاپ', price=25000000, tags=[])
print(p1 == p2) # True — مقایسه بر اساس مقدارتوجه کنید که برای مقادیر پیشفرض قابلتغییر مانند لیست، نباید مستقیماً tags: list = [] نوشت، چون این مقدار بین همهی نمونهها به اشتراک گذاشته میشود. به همین دلیل از field(default_factory=list) استفاده میشود تا برای هر شیء جدید یک لیست تازه ساخته شود.
میتوانید با پارامتر frozen=True یک dataclass غیرقابلتغییر (immutable) بسازید، مشابه رفتار تاپل، که برای مدلسازی دادههای ثابت مانند مختصات جغرافیایی بسیار مناسب است. ترکیب dataclass با type hints، یکی از تمیزترین روشهای مدلسازی داده در پایتون مدرن است.