Python Academy · पाठ

डिफ़ॉल्ट मान और field()

डिफ़ॉल्ट मान सेट करें और field() विकल्पों का उपयोग करें।

पाठ 2, कुल 4 में से13 चरण

डिफ़ॉल्ट मान और field(), CoddyKit पर Python Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Python Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

फ़ील्ड के डिफ़ॉल्ट मान देना

फ़ंक्शन पैरामीटर की तरह, डेटाक्लास फ़ील्ड में भी डिफ़ॉल्ट मान हो सकते हैं। इंस्टेंस बनाते समय डिफ़ॉल्ट वाले फ़ील्ड को छोड़ा जा सकता है।

from dataclasses import dataclass

@dataclass
class Server:
    host: str
    port: int = 8080

print(Server('localhost'))
print(Server('example.com', 443))

क्रम महत्वपूर्ण है

डिफ़ॉल्ट वाले फ़ील्ड, बिना डिफ़ॉल्ट वाले फ़ील्ड के बाद आने चाहिए, बिल्कुल फ़ंक्शन आर्ग्युमेंट की तरह। अन्यथा वर्ग परिभाषित करते समय Python एक TypeError उत्पन्न करता है।

from dataclasses import dataclass

@dataclass
class User:
    name: str       # required
    active: bool = True   # optional

print(User('Alice'))

परिवर्तनशील डिफ़ॉल्ट का खतरा

आप सूची या शब्दकोश जैसी परिवर्तनशील ऑब्जेक्ट को सीधे डिफ़ॉल्ट के रूप में उपयोग नहीं कर सकते। सभी इंस्टेंस एक ही ऑब्जेक्ट साझा करेंगे। Python इसका पता लगाकर आपकी सुरक्षा के लिए ValueError उत्पन्न करता है।

from dataclasses import dataclass
from typing import List

# This raises ValueError at class definition time:
try:
    @dataclass
    class Bad:
        items: List[int] = []
except ValueError as e:
    print('Error:', e)

field(default_factory=...)

परिवर्तनशील डिफ़ॉल्ट देने के लिए field(default_factory=...) का उपयोग करें। फ़ैक्टरी प्रत्येक नए इंस्टेंस के लिए बुलाई जाती है, इसलिए हर इंस्टेंस को अपना नया ऑब्जेक्ट मिलता है।

from dataclasses import dataclass, field
from typing import List

@dataclass
class Cart:
    items: List[str] = field(default_factory=list)

a = Cart()
a.items.append('apple')
b = Cart()
print(a.items, b.items)

default और default_factory

जब आपको field() के अन्य विकल्पों की भी आवश्यकता हो, तब अपरिवर्तनशील मानों के लिए field(default=...) का उपयोग करें। किसी भी परिवर्तनशील मान के लिए default_factory का उपयोग करें। आप दोनों को एक साथ नहीं दे सकते।

from dataclasses import dataclass, field

@dataclass
class Config:
    retries: int = field(default=3)
    tags: list = field(default_factory=list)

print(Config())

repr से फ़ील्ड हटाना

repr=False विकल्प किसी फ़ील्ड को बनाए गए __repr__ से छिपाता है। यह गोपनीय जानकारी या बड़े आंतरिक बफ़र के लिए उपयोगी है।

from dataclasses import dataclass, field

@dataclass
class Account:
    user: str
    token: str = field(repr=False, default='secret')

print(Account('alice'))

तुलना से फ़ील्ड हटाना

compare=False के साथ, बनाए गए __eq__ (और क्रम निर्धारण) में किसी फ़ील्ड को अनदेखा किया जाता है। उस फ़ील्ड के अलग होने पर भी दो इंस्टेंस समान हो सकते हैं।

from dataclasses import dataclass, field

@dataclass
class Event:
    name: str
    timestamp: float = field(compare=False, default=0.0)

print(Event('login', 1.0) == Event('login', 99.0))

init=False फ़ील्ड

init=False सेट करने पर फ़ील्ड __init__ से बाहर रहता है। आमतौर पर इसे डिफ़ॉल्ट के साथ जोड़ा जाता है या __post_init__ में सेट किया जाता है।

from dataclasses import dataclass, field

@dataclass
class Circle:
    radius: float
    area: float = field(init=False, default=0.0)

c = Circle(2.0)
print(c)

व्युत्पन्न मानों के लिए __post_init__

बनाए गए __init__ के ठीक बाद कोड चलाने के लिए __post_init__ परिभाषित करें। अन्य फ़ील्ड से निकाले गए फ़ील्ड की गणना करने के लिए यह स्वाभाविक स्थान है।

from dataclasses import dataclass, field

@dataclass
class Circle:
    radius: float
    area: float = field(init=False, default=0.0)

    def __post_init__(self):
        self.area = 3.14159 * self.radius ** 2

print(Circle(2.0))

मेटाडेटा संग्रहीत करना

metadata आर्ग्युमेंट किसी फ़ील्ड के साथ मनमाना मैपिंग जोड़ता है। Python इसे अनदेखा करता है, लेकिन उपकरण और आपका अपना कोड दस्तावेज़ीकरण या सत्यापन संकेतों के लिए इसे पढ़ सकते हैं।

from dataclasses import dataclass, field, fields

@dataclass
class Product:
    price: float = field(metadata={'unit': 'USD'})

for f in fields(Product):
    print(f.name, f.metadata)

field() विकल्पों को संयोजित करना

विकल्पों को एक साथ जोड़ा जा सकता है। एक ही फ़ील्ड repr से स्वयं को छिपा सकता है, तुलना से बाहर रह सकता है और एक ही समय में डिफ़ॉल्ट मान भी रख सकता है।

from dataclasses import dataclass, field

@dataclass
class Session:
    user: str
    token: str = field(default='x', repr=False, compare=False)

print(Session('alice'))
print(Session('alice') == Session('alice', token='different'))

त्वरित जाँच

डेटाक्लास फ़ील्ड को डिफ़ॉल्ट खाली सूची कैसे देनी चाहिए?

पुनरावलोकन

आपने डिफ़ॉल्ट मान सेट करना और field() विकल्पों का उपयोग करना सीखा।

  • डिफ़ॉल्ट वाले फ़ील्ड आवश्यक फ़ील्ड के बाद आते हैं।
  • परिवर्तनशील डिफ़ॉल्ट के लिए default_factory का उपयोग करें।
  • repr, compare, init और metadata प्रत्येक फ़ील्ड को अनुकूलित करते हैं।
  • __post_init__ व्युत्पन्न मानों की गणना करता है।
शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
76
पाठ
320

अक्सर पूछे जाने वाले प्रश्न

क्या “डिफ़ॉल्ट मान और field()” पाठ निःशुल्क है?

हाँ—“डिफ़ॉल्ट मान और field()” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Python Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“डिफ़ॉल्ट मान और field()” में मैं क्या सीखूँगा?

डिफ़ॉल्ट मान सेट करें और field() विकल्पों का उपयोग करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Python Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Python Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Python Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“डिफ़ॉल्ट मान और field()” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Python Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Python Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Dataclass परिभाषित करना
  2. डिफ़ॉल्ट मान और field()
  3. अपरिवर्तनीय और तुलना विकल्प
  4. attrs लाइब्रेरी
← Python Academy पर वापस जाएँ