आप सीधे id
का मूल्य पुन: प्राप्त करने के बजाय getattr
आवरण का उपयोग करना चाहिए।
a = getattr(myobject, 'id', None)
यह कह रही है की तरह है "मैं वस्तु myobject
से विशेषता id
पुनः प्राप्त करना चाहते हैं, लेकिन अगर कोई वस्तु myobject
अंदर कोई गुण id
है, तो None
लौटने के बजाय।" लेकिन यह कुशलतापूर्वक करता है।
a = myobject.getattr('id', None)
ओपी अनुरोध के अनुसार, 'deep getattr':
def deepgetattr(obj, attr):
"""Recurses through an attribute chain to get the ultimate value."""
return reduce(getattr, attr.split('.'), obj)
# usage:
print deepgetattr(universe, 'galaxy.solarsystem.planet.name')
सरल स्पष्टीकरण:
कुछ वस्तुएं भी getattr
उपयोग की निम्न प्रपत्र का समर्थन
Reduce एक में जगह की तरह है रिकर्सिव फ़ंक्शन।क्या यह इस मामले में करता है obj
(ब्रह्मांड) के साथ शुरू और फिर रिकर्सिवली प्रत्येक विशेषता के लिए आप getattr
का उपयोग कर, तो अपने प्रश्न में यह इस तरह किया जाएगा तक पहुँचने का प्रयास गहरी मिलता है:
a = getattr(getattr(myobject, 'id', None), 'number', None)
स्रोत
2013-02-17 16:52:59
+1, यह शायद सबसे अच्छा विचार है, मुझे नहीं पता कि मैंने ऐसा क्यों नहीं सोचा। –
हा, धन्यवाद, लापरवाह आत्म प्रचार के लिए आपके समर्थन का उपयोग करने जा रहा है।: पी –
@ इंबर रोज़ और क्या होगा यदि मैं ओब्टा चाहता हूं वैसे ही विशेषता के गुण में, जैसे 'a = myobject.id.number'? – alwbtc