मैं इस तरह एक डेकोरेटर के माध्यम से एक वर्ग के लिए कई डमी-गुण जोड़ने के लिए, चाहते हैं:मैं एक सजावट का उपयोग कर कक्षा में गुण कैसे जोड़ सकता हूं जो नामों की सूची तर्क के रूप में लेता है?
def addAttrs(attr_names):
def deco(cls):
for attr_name in attr_names:
def getAttr(self):
return getattr(self, "_" + attr_name)
def setAttr(self, value):
setattr(self, "_" + attr_name, value)
prop = property(getAttr, setAttr)
setattr(cls, attr_name, prop)
setattr(cls, "_" + attr_name, None) # Default value for that attribute
return cls
return deco
@addAttrs(['x', 'y'])
class MyClass(object):
pass
दुर्भाग्य से, decoarator अपनी सामग्री के बजाय attr_name
के संदर्भ रखने के लिए लगता है। इसलिए, MyClass.x
और MyClass.y
पहुंच दोनों MyClass._y
:
a = MyClass()
a.x = 5
print a._x, a._y
>>> None, 5
a.y = 8
print a._x, a._y
>>> None, 8
क्या मैं अपेक्षित व्यवहार प्राप्त करने के लिए बदलने के लिए है?