पाठ 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)) # TrueEnum
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 activeMutable 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 से ये बनाते हैं।