मुझे लगता है कि आपका भ्रम इस तथ्य से उत्पन्न होता है कि सीधे डॉट नोटेशन (पूर्व a.b.c
) getattr()
के समान पैरामीटर तक पहुंचता है, लेकिन पार्सिंग तर्क अलग है। जबकि वे अनिवार्य रूप से किसी ऑब्जेक्ट की __dict__
विशेषता में कुंजी रखते हैं, getattr()
डॉट-सुलभ विशेषताओं पर अधिक कठोर आवश्यकताओं के लिए बाध्य नहीं है। उदाहरण के लिए
setattr(foo, 'Big fat ugly string. But you can hash it.', 2)
, वैध है के बाद से है कि स्ट्रिंग सिर्फ foo.__dict__
में एक हैश कुंजी हो जाता है, लेकिन
foo.Big fat ugly string. But you can hash it. = 2
और
foo.'Big fat ugly string. But you can hash it.' = 2
क्योंकि अब आप के लिए पूछ रहे हैं दुभाषिया वाक्य रचना त्रुटियाँ हैं इन चीजों को कच्चे कोड के रूप में पार्स करें, और यह काम नहीं करता है।
इस का दूसरा पहलू यह है कि जब foo.b.c
foo.__dict__['b'].__dict__['c']
के बराबर है, getattr(foo, 'b.c')
foo.__dict__['b.c']
के बराबर है है। यही कारण है कि getattr
काम नहीं कर रहा है जैसा आप उम्मीद कर रहे हैं।
स्रोत
2012-08-15 19:50:47
मिलेगा अब यह करते हैं। 'Getattr (a, 'b.c') 'अब वापस क्या होना चाहिए? क्या होगा यदि पहले 'बी' पर कोई 'सी' नहीं था? आपको विशेषता नामों में '.' का उपयोग करने की अनुमति है, इसलिए आप इस तरह की वस्तुओं पर 'getattr' को पार करने में सक्षम होने की उम्मीद नहीं कर सकते हैं। –