इसलिए, मैं पायथन 2.6 में सज्जाकारों के साथ खेल रहा हूं, और मुझे उन्हें काम करने में कुछ परेशानी हो रही है। यहाँ मेरी कक्षा फ़ाइल है:
class testDec:
@property
def x(self):
print 'called getter'
return self._x
@x.setter
def x(self, value):
print 'called setter'
self._x = value
मुझे लगा कि इसका मतलब x
एक संपत्ति की तरह व्यवहार करना है, लेकिन इन कार्यों को कॉल करें और सेट करें। इसलिए, मैंने IDLE को निकाल दिया और इसकी जाँच की:
>>> from testDec import testDec
from testDec import testDec
>>> t = testDec()
t = testDec()
>>> t.x
t.x
called getter
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "testDec.py", line 18, in x
return self._x
AttributeError: testDec instance has no attribute '_x'
>>> t.x = 5
t.x = 5
>>> t.x
t.x
5
स्पष्ट रूप से पहली कॉल अपेक्षा के अनुसार काम करती है, क्योंकि मैं गेट्टर को कॉल करता हूं, और कोई डिफ़ॉल्ट मान नहीं है, और यह विफल रहता है। ठीक है, अच्छा, मैं समझता हूं। हालाँकि, कॉल करने के लिए कॉल t.x = 5
एक नई संपत्ति बनाने के लिए लगता है x
, और अब गेट्टर काम नहीं करता है!
मैं क्या खो रहा हूँ?