Python Academy · पाठ

@property डेकोरेटर

गेटर, सेटर और डिलीटर के लिए property का उपयोग करें।

पाठ 3, कुल 4 में से14 चरण

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

परिचय

@property किसी विधि को पढ़ने योग्य एट्रिब्यूट में बदलता है। @setter और @deleter नियंत्रित पहुँच का पैटर्न पूरा करते हैं।

@property क्यों

getX()/setX() की Java-शैली के बजाय Python में @property का उपयोग किया जाता है। पहुँच किसी एट्रिब्यूट जैसी दिखती है: obj.value, न कि obj.get_value()।
class Circle:
    def __init__(self, r): self._r = r
    @property
    def radius(self): return self._r
c = Circle(5)
print(c.radius)  # no ()

गणना किए गए प्रॉपर्टी

@property विधियाँ आवश्यकता पड़ने पर गणना करती हैं। obj.area को हर बार एक्सेस करने पर गणना की जाती है—किसी संग्रहीत मान की आवश्यकता नहीं होती।
import math
class Circle:
    def __init__(self, r): self._r = r
    @property
    def area(self): return math.pi * self._r**2
c = Circle(5)
print(round(c.area, 2))

प्रॉपर्टी सेटर

@property_name.setter एक सेटर जोड़ता है। अब c.radius = 10 सेटर विधि को कॉल करता है।
class Circle:
    def __init__(self, r): self._r = r
    @property
    def radius(self): return self._r
    @radius.setter
    def radius(self, val):
        if val <= 0: raise ValueError('radius must be positive')
        self._r = val
c = Circle(5)
c.radius = 10
print(c.radius)

प्रॉपर्टी डिलीटर

@property_name.deleter del obj.attr को संभालता है। इसका उपयोग सफ़ाई संबंधी तर्क के लिए करें।
class User:
    def __init__(self, name): self._name = name
    @property
    def name(self): return self._name
    @name.deleter
    def name(self): del self._name
u = User('Alice')
del u.name
print(hasattr(u, '_name'))

केवल-पठन प्रॉपर्टी

केवल गेटर परिभाषित करें (सेटर नहीं)। असाइन करने का प्रयास AttributeError उत्पन्न करता है।
class Const:
    def __init__(self, v): self._v = v
    @property
    def value(self): return self._v
c = Const(42)
print(c.value)
try: c.value = 99
except AttributeError as e: print(e)

सत्यापन वाली प्रॉपर्टी

डेटा का सत्यापन करने के लिए सेटर सबसे उपयुक्त स्थान हैं—संग्रहीत करने से पहले प्रकार, सीमा या प्रारूप जाँचें।
class BoundedInt:
    def __init__(self, lo, hi): self.lo,self.hi=lo,hi; self._v=lo
    @property
    def value(self): return self._v
    @value.setter
    def value(self, v):
        if not self.lo <= v <= self.hi:
            raise ValueError(f'{v} out of [{self.lo},{self.hi}]')
        self._v = v
b = BoundedInt(0, 10)
b.value = 5
print(b.value)

प्रॉपर्टी के साथ कैशिंग

एक बार गणना करने और परिणाम को मेमोइज़ करने के लिए @property को कैश किए गए मान के साथ मिलाएँ।
class Expensive:
    _cache = None
    @property
    def result(self):
        if self._cache is None:
            self._cache = sum(range(1000))
        return self._cache
e = Expensive()
print(e.result)
print(e.result)

cached_property (Python 3.8+)

@functools.cached_property प्रॉपर्टी की गणना एक बार करता है और उसे इंस्टेंस एट्रिब्यूट के रूप में संग्रहीत करता है—बार-बार गणना नहीं करनी पड़ती।
from functools import cached_property
import math
class Circle:
    def __init__(self, r): self.r = r
    @cached_property
    def area(self): return math.pi * self.r**2
c = Circle(5)
print(round(c.area, 2))

प्रॉपर्टी बनाम __slots__

__slots__ मनमाने एट्रिब्यूट बनाने से रोकता है और मेमोरी बचाता है। प्रॉपर्टी तर्क जोड़ती हैं। दोनों एक-दूसरे के पूरक हैं।
class Point:
    __slots__ = ('_x', '_y')
    def __init__(self, x, y): self._x,self._y=x,y
    @property
    def x(self): return self._x
p = Point(1, 2)
print(p.x)

@property का उपयोग कब करें

@property का उपयोग तब करें जब आपको सत्यापन, गणना किए गए मान या आंतरिक कार्यान्वयन बदलते समय पिछली संगतता बनाए रखने की आवश्यकता हो।
# Before: class Person:
#     def __init__(self, age): self.age = age
# After: add validation without changing caller code
class Person:
    def __init__(self, age): self.age = age
    @property
    def age(self): return self._age
    @age.setter
    def age(self, v):
        if v < 0: raise ValueError('negative age')
        self._age = v
p = Person(30)
print(p.age)

त्वरित जाँच

जब आप केवल-पठन @property (जिसका सेटर परिभाषित नहीं है) को असाइन करने का प्रयास करते हैं, तो क्या होता है?

पुनरावलोकन

@property: गेटर एट्रिब्यूट एक्सेस बन जाता है। @name.setter लिखने का समर्थन जोड़ता है। @name.deleter del का समर्थन जोड़ता है। @cached_property एक बार गणना करता है। सेटर सत्यापन के लिए होते हैं।

आगे बढ़ते रहें

आप बहुत अच्छी प्रगति कर रहे हैं! अगली अवधारणा में निपुणता हासिल करने के लिए आगे बढ़ते रहें।
शुरुआत निःशुल्क

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

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

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

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

क्या “@property डेकोरेटर” पाठ निःशुल्क है?

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

“@property डेकोरेटर” में मैं क्या सीखूँगा?

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

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

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

“@property डेकोरेटर” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

  1. फ़ंक्शन फ़र्स्ट-क्लास ऑब्जेक्ट के रूप में
  2. कस्टम डेकोरेटर लिखना
  3. @property डेकोरेटर
  4. @classmethod और @staticmethod
← Python Academy पर वापस जाएँ