getattr
एक अंतर्निहित फ़ंक्शन ले रहा है (कम से कम) दो तर्क: वह ऑब्जेक्ट जिसमें से आप विशेषता प्राप्त कर रहे हैं, और विशेषता का स्ट्रिंग नाम।
तो स्ट्रिंग नाम एक निरंतर है, कहते हैं कि 'foo'
, getattr(obj, 'foo')
बिल्कुल वही बातobj.foo
के रूप में है।
तो, अंतर्निहित फ़ंक्शन getattr
के लिए मुख्य उपयोग केस तब होता है जब आपके पास स्थिरता के रूप में विशेषता नाम नहीं होता है, बल्कि एक चर के रूप में होता है। एक दूसरा महत्वपूर्ण उपयोग के मामले जब आप इसे तीन तर्कों से पारित है, बल्कि सिर्फ दो से: उस मामले में, अगर विशेषता वस्तु से अनुपस्थित है, getattr
तीसरे, "डिफ़ॉल्ट", तर्क है, बजाय एक अपवाद को ऊपर उठाने देता है।
__getattr__
एक विशेष विधि, एक वर्ग में परिभाषित है, जब उस वर्ग का एक उदाहरण के कुछ विशेषता अनुरोध किया जाता है लागू हो जाता है कि, और अन्य सामान्य तरीके कि विशेषता (आपूर्ति करने के लिए उदाहरण के __dict__
, स्लॉट्स, गुण, और इतने के माध्यम से है चालू) सभी असफल रहे। आप इसे परिभाषित कर सकते हैं, उदाहरण के लिए, जब आप अन्य ऑब्जेक्ट्स को अन्यथा अपरिभाषित विशेषता लुकअप करना चाहते हैं।
तो आपका दूसरा उदाहरण गलत है क्योंकि निर्मित getattr
कभी भी को एक भी तर्क के साथ बुलाया नहीं जा सकता है।
तीसरा एक विफल रहता है क्योंकि जिस शब्दकोश को आप "एक विशेषता प्राप्त करने" की कोशिश कर रहे हैं, उसमें विशेषता नहीं है - इसमें आइटम हैं, जो पाठ्यक्रम के गुणों से पूरी तरह से अलग हैं।
स्रोत
2009-12-22 07:14:16
संभावित डुप्लिकेट [\ _ \ _ getattr \ _ \ _ और \ _ \ _ getattribute \ _ \ _] के बीच अंतर को समझना (http://stackoverflow.com/questions/4295678/understanding-the-difference-between- Getattr-and-getattribute) – Trilarion
@Trilarion जो इस प्रश्न के लिए उचित डुप्लिकेट नहीं है –