๐ Python dataclasses โ Clean Data Models in Python
The @dataclass decorator auto-generates boilerplate code for data-holding classes โ __init__, __repr__, __eq__ all for free.
Use @dataclass over plain dicts for structured data โ you get IDE autocomplete, type checking, and self-documentation.
๐ป Code Example:
from dataclasses import dataclass, field, asdict, astuple from typing import List, Optional from datetime import datetime @dataclass class PynfiniyCourse: title: str instructor: str price: float = 999.0 is_premium: bool = True tags: List[str] = field(default_factory=list) # Mutable default! created_at: datetime = field(default_factory=datetime.now) # Custom method โ works like any class def apply_discount(self, pct: float) -> float: return self.price * (1 - pct / 100) # Auto-generated __init__ course = PynfiniyCourse( title="Infinite Python", instructor="santoshtvk", tags=["python", "beginner", "pynfinity"] ) print(course) # PynfiniyCourse(title='Infinite Python', instructor='santoshtvk', price=999.0, ...) # == comparison works automatically course2 = PynfiniyCourse(title="Infinite Python", instructor="santoshtvk") # print(course == course2) # True if same fields # Convert to dict for JSON / API responses print(asdict(course)) # Frozen dataclass โ immutable like a tuple @dataclass(frozen=True) class Point: x: float y: float p = Point(1.0, 2.0) # p.x = 5 # FrozenInstanceError!
| Concept | Key Takeaway |
|---|---|
| @dataclass | Auto-generates __init__, __repr__, __eq__ |
| field(default_factory=list) | Required for mutable default values |
| @dataclass(order=True) | Also generates <, <=, >, >= comparison methods |
| @dataclass(frozen=True) | Immutable dataclass โ can be used as dict key |
| asdict(obj) | Convert to plain dict recursively |
Keep exploring and happy coding! ๐