← Back to Python Course | Chapter 11: Advanced Python | Lesson 9 of 12

Python Dataclasses

एक dataclass जानकारी रखने के लिए एक shortcut class है, जैसे हर fact के लिए blanks वाला एक तैयार form। Python आपके लिए वह उबाऊ setup code लिख देता है।
Syntax
python
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?

python
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

python
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

python
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

python
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

python
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
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.