فصل چهارم: Context Manager، Type Hints و Dataclass

Dataclass برای ساخت کلاس‌های داده‌محور

کاهش کدهای تکراری با 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، یکی از تمیزترین روش‌های مدل‌سازی داده در پایتون مدرن است.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.