मैं अजगर में गुणों के बारे में थोड़ा उलझन में हूं। निम्नलिखित कोडपायथन संपत्ति गेटर/सेटर भ्रम
class A:
@property
def N(self):
print("A getter")
return self._N
@N.setter
def N(self,v):
print("A setter")
self._N = v
def __init__(self):
self._N = 1
class B:
@property
def N(self):
print("B getter")
return self.a.N
@N.setter
def N(self,v):
print("B setter")
self.a.N = v
def __init__(self):
self.a = A()
if __name__ == '__main__':
b=B()
b.N = 2
print(b.N, b.a.N)
b.N = 3
print(b.N, b.a.N)
बी पर विचार ए के लिए एक आवरण की तरह कुछ यह getters और setters का उपयोग करता है पर ही एक के गुणों को मैप करने के लिए (के पाठ्यक्रम भी इसे विरासत के माध्यम से भी कर सकता है) होना चाहिए। समस्या है, कि यह बस python2.6 में अपेक्षा के अनुरूप, जबकि यह python3 में करता है काम नहीं करता:
> python2 test.py
A getter
(2, 1)
A getter
(3, 1)
> python3 test.py
B setter
A setter
B getter
A getter
A getter
2 2
B setter
A setter
B getter
A getter
A getter
3 3
मैंने कुछ गलत कर रहा हूँ या जहां वास्तव में समस्या है?
ठीक है आप सही हैं, जो इसे हल करता है लेकिन मुझे यह समझ में नहीं आता कि यहां क्या गलत है। – buergi
@buergi पुरानी शैली के वर्गों में वर्णनकर्ता नहीं हो सकते हैं। '@ संपत्ति 'वर्णनकर्ता है। [पायथन डेटा मॉडल संदर्भ] पर अधिक जानकारी (http://docs.python.org/reference/datamodel.html) – reclosedev