2012-01-27 15 views
5
>>> my_object.name = 'stuff' 
>>> my_str = 'name' 
>>> my_object[my_str] # won't work because it's not a dictionary :) 

मैं my_str पर परिभाषित my_object के क्षेत्र कैसे उपयोग कर सकते हैं?अजगर - प्रवेश वस्तु एक शब्दकोश में के रूप में जिम्मेदार बताते हैं

+0

बीटीडब्ल्यू, यह जावास्क्रिप्ट – watashiSHUN

उत्तर

18
getattr(my_object, my_str) 

More on getattr.

+0

'myobject .__ dict __ [my_str]' के खिलाफ क्या फायदा है? बेहतर प्रदर्शन ? –

+3

क्या मैं मानक पर वापस आ सकता हूं "यह अधिक पायथनिक" उत्तर है? साथ ही, निजी __ चर में टैप करने से जोखिमों के अपने सेट के साथ आता है। आप जो करने की कोशिश कर रहे हैं वह है गेटैटर और सेटैटर क्या हैं। – Tom

+0

ठीक है जानकारी के लिए धन्यवाद –

1
>>> myobject.__dict__[my_str] 
'stuff' 
+2

में पूरी तरह से मान्य है नोट करें कि यह गुणों के लिए टूटता है, '__slots__' और' __getattr __/__ getattribute __/__ setattr__' अधिभार - और शायद कुछ अन्य चीजें। – delnan

+0

ठीक है जानकारी के लिए धन्यवाद। क्या आपको लगता है कि 'getattr (my_object, my_str)' प्रदर्शन के लिए भी बेहतर है? –

+2

प्रदर्शन यहां आपकी सबसे कम चिंता है। यदि ऐसा है, तो आप उस हिस्से को फिर से लिख सकते हैं (यानी पूरे लूप, कई क्रॉस-भाषा कॉल से बचने के लिए), लेकिन ऐसे अनुकूलन पर विचार करने से पहले आपको अस्वीकार्य मंदी का ठोस सबूत होना चाहिए। – delnan

1

आप सामान्य रूप में __dict__ -approach नहीं कर सकते। हमेशा क्या काम करेगा

getattr(myobject, my_str) 

यदि आप निर्देश की तरह पहुंच चाहते हैं, तो बस एक ओवरलोडेड इंडेक्स-ऑपरेटर के साथ एक कक्षा को परिभाषित करें।

संबंधित मुद्दे