पाठ 29 / 49

Dataclasses और Enums

Data रखने वाली classes के लिए @dataclass से boilerplate घटाएँ और fixed named constants के लिए Enum उपयोग करें।

@dataclass

@dataclass type-annotated fields से __init__, __repr__ और __eq__ बना देता है, इसलिए data classes में boilerplate नहीं लगता।

from dataclasses import dataclass, field

@dataclass
class User:
    name: str
    age: int = 0
    tags: list[str] = field(default_factory=list)

u = User("Ada", 36)
print(u)            # User(name='Ada', age=36, tags=[])
print(u == User("Ada", 36))  # True

Enum

Enum values का fixed set नाम देता है, इसलिए code में magic string के बजाय Status.ACTIVE पढ़ने को मिलता है।

from enum import Enum

class Status(Enum):
    PENDING = "pending"
    ACTIVE = "active"

s = Status("active")
print(s, s.name, s.value)   # Status.ACTIVE ACTIVE active

Mutable defaults के लिए field(default_factory=list) उपयोग करें। Dataclass को immutable और hashable बनाने के लिए frozen=True जोड़ें।

त्वरित जाँच

त्वरित जाँच: @dataclass कौन-से methods अपने-आप बनाता है?

  • __init__, __repr__ और __eq__
  • केवल __del__
  • __enter__ और __exit__
  • कोई नहीं
Answer

__init__, __repr__ और __eq__ — Dataclasses annotated fields से ये बनाते हैं।