๐ฆ Dataclasses
Dataclasses provide a decorator and functions for automatically adding generated special methods to classes.
Mastering this concept will significantly boost your Python data science skills!
๐ป Code Example:
from dataclasses import dataclass, field, asdict, astuple, KW_ONLY from typing import List, Optional, ClassVar from datetime import datetime # 1. Basic dataclass โ auto-generates __init__, __repr__, __eq__ @dataclass(order=True) # also auto-generates <, <=, >, >= class PebbleCard: sort_index: float = field(init=False, repr=False) title : str author : str score : float = 4.0 tags : List[str] = field(default_factory=list) created_at : datetime = field(default_factory=datetime.now, compare=False) # Class variable โ NOT an instance field platform : ClassVar[str] = "pynfinity.com" def __post_init__(self): # KW_ONLY fields must be passed as keyword args self.sort_index = -self.score # Sort descending by score @property def summary(self) -> str: return f"[{self.score}โญ] {self.title} โ {self.author}" # 2. Frozen dataclass โ immutable (hashable โ usable in sets/dicts) @dataclass(frozen=True) class CourseKey: category: str slug : str def __str__(self): return f"{self.category}/{self.slug}" # 3. Slots (Python 3.10+) โ memory-efficient @dataclass(slots=True) class XPEvent: user : str action : str points : int ts : datetime = field(default_factory=datetime.utcnow) # โโ Usage โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ p1 = PebbleCard("Python Decorators", "santoshtvk", score=4.9, tags=["python", "advanced"]) p2 = PebbleCard("AsyncIO Guide", "dhruv", score=4.7, tags=["python", "async"]) print(p1) print("Summary:", p1.summary) print("p1 > p2:", p1 > p2) # Sorted by score deck = sorted([p2, p1]) for p in deck: print("-", p.summary) # Serialize print("\nAs dict:", asdict(p1)) key1 = CourseKey("python", "decorators") key2 = CourseKey("python", "decorators") print("\nFrozen eq:", key1 == key2) # True course_map = {key1: "Decorators Tutorial"} evt = XPEvent("tvk", "pebble", 100) print("XP Event:", evt)
Keep exploring and happy coding! ๐ป