Python Dataclasses
In this page:
from dataclasses import dataclass
@dataclass
class ClassName:
field1: type
field2: type = default_value
Dataclass क्या है?
एक dataclass ऐसी class है जिसका मुख्य काम जटिल behavior की बजाय structured data रखना है।
किसी class definition के ऊपर @dataclass decorator जोड़ना class के annotated fields के आधार पर आपके लिए अपने आप __init__, __repr__, और __eq__ generate कर देता है, जिससे एक साधारण data container के लिए आपको वह boilerplate हाथ से लिखने की ज़रूरत नहीं रहती।
उदाहरण: What is a Dataclass?
from dataclasses import dataclass
@dataclass # auto-generates __init__, __repr__, and __eq__
class Point:
x: int
y: int
p = Point(1, 2)
print(p)
Default Values
किसी field को default value assign करना (जैसे count: int = 0) मतलब है कि callers instance बनाते समय उस argument को पूरी तरह छोड़ सकते हैं, और Python उसे अपने आप भर देता है।
यह बिल्कुल एक साधारण function के default arguments की तरह काम करता है, क्योंकि @dataclass अपना __init__ उसी तरह बनाता है जैसे आप हाथ से बनाते।
उदाहरण: Default Values
from dataclasses import dataclass
@dataclass
class Counter:
count: int = 0 # default lets callers omit this argument
print(Counter()) # uses the default
print(Counter(5)) # overrides it
Dataclasses में Type Hinting
dataclass के हर field पर एक type annotation होना ज़रूरी है -- यही तरीका है जिससे decorator पता लगाता है कि कौन-से class attributes असली data fields हैं बनाम साधारण class-level code।
इस mechanical ज़रूरत से परे, annotations documentation का भी काम करती हैं, जिससे सिर्फ़ class body से ही आपके data का shape साफ़ दिखता है।
उदाहरण: Type Hinting in Dataclasses
from dataclasses import dataclass
@dataclass
class Product:
name: str # type annotation required for every dataclass field
price: float
p = Product("Book", 9.99)
print(p)
Read-Only Dataclasses
decorator को frozen=True पास करना instances को बनने के बाद immutable बना देता है: किसी attribute को दोबारा assign करने की कोई भी कोशिश FrozenInstanceError raise करती है।
यह तब उपयोगी है जब आपको value-object semantics चाहिए, जैसे instances को dictionary keys के रूप में इस्तेमाल करना या यह गारंटी देना कि कोई record codebase में कहीं और चुपचाप बदला नहीं जा सकता।
उदाहरण: Read-Only Dataclasses
from dataclasses import dataclass, FrozenInstanceError
@dataclass(frozen=True) # instances become immutable after construction
class Point:
x: int
y: int
p = Point(1, 2)
try:
p.x = 5 # reassignment is not allowed
except FrozenInstanceError:
print("Cannot modify a frozen dataclass")
field() Function
किसी field value के रूप में सीधे [] या {} जैसा mutable default इस्तेमाल करना साधारण function defaults से उधार लिया गया एक जाल है -- हर instance आख़िर में बिल्कुल एक ही list object share करता।
field(default_factory=list) pattern एक shared object दोबारा इस्तेमाल करने की बजाय हर नए instance के लिए factory को ताज़ा call करके इसे ठीक करता है।
उदाहरण: The field() Function
from dataclasses import dataclass, field
@dataclass
class Cart:
items: list = field(default_factory=list) # fresh list per instance, not one shared list
a = Cart()
b = Cart()
a.items.append("apple")
print(a.items, b.items) # b.items is unaffected
Chapter Quiz — Complete all 12 topics to unlock
0/12 topics done
Complete these topics first: