जवाबों:
निर्मित कार्य हैं getattr
और कहा जाता हैsetattr
getattr(object, attrname)
setattr(object, attrname, value)
इस मामले में
x = getattr(t, 'attr1')
setattr(t, 'attr1', 21)
df1
, और एक चर x = 'df1'
यानी df1 जो कि var x में एक स्ट्रिंग के रूप में है। मैं इस तरह डीएफ के आकार को मुद्रित करना चाहता हूं, getattr(x, 'shape')
या getattr('df1', 'shape')
। मुझे पता है कि यह गेटअटर, किसी भी अन्य तरीकों से नहीं किया जा सकता है।
new
मॉड्यूल का उपयोग करके पायथन 2 पर लागू होता है ।कार्य सेटट्रा और गेटैट्र में निर्मित अजगर है। जिसका उपयोग किसी वर्ग की विशेषता को सेट और प्राप्त करने के लिए किया जा सकता है।
एक संक्षिप्त उदाहरण:
>>> from new import classobj
>>> obj = classobj('Test', (object,), {'attr1': int, 'attr2': int}) # Just created a class
>>> setattr(obj, 'attr1', 10)
>>> setattr(obj, 'attr2', 20)
>>> getattr(obj, 'attr1')
10
>>> getattr(obj, 'attr2')
20
यदि आप तर्क को कक्षा के अंदर छिपाए रखना चाहते हैं, तो आप सामान्यीकृत गेटर विधि का उपयोग करना पसंद कर सकते हैं:
class Test:
def __init__(self):
self.attr1 = 1
self.attr2 = 2
def get(self,varname):
return getattr(self,varname)
t = Test()
x = "attr1"
print ("Attribute value of {0} is {1}".format(x, t.get(x)))
आउटपुट:
Attribute value of attr1 is 1
एक और apporach जो इसे और भी बेहतर तरीके से छिपा सकता है __getattribute__
, वह है मैजिक विधि का उपयोग करना , लेकिन मुझे एक अंतहीन लूप मिलता रहा जिसे मैं हल करने में असमर्थ था जब मैं उस विधि के अंदर मौजूद विशेषता मान को प्राप्त करने की कोशिश कर रहा था।
यह भी ध्यान दें कि आप वैकल्पिक रूप से उपयोग कर सकते हैं vars()
। उपरोक्त उदाहरण में, आप का विनिमय कर सकते getattr(self,varname)
द्वारा return vars(self)[varname]
, लेकिन getattr
का जवाब के अनुसार बेहतर हो सकता है क्या बीच का अंतर है vars
और setattr
? ।