getattr बनाम getattribute पायथन में
__getattr__ और __getattribute__ के बीच अंतर को समझना महत्वपूर्ण है पायथन ऑब्जेक्ट्स के साथ काम करते समय। दोनों विधियों को यह नियंत्रित करने के लिए डिज़ाइन किया गया है कि किसी ऑब्जेक्ट से विशेषताओं को कैसे पुनर्प्राप्त किया जाता है, लेकिन वे अलग-अलग कार्य करते हैं और विशिष्ट उपयोग के मामले होते हैं।
नई-शैली कक्षाएं
विस्तार से पहले __getattr__ और __getattribute__ के बीच अंतर, यह "नई शैली की कक्षाओं" की अवधारणा को स्पष्ट करने लायक है। पायथन में, दो प्रकार की कक्षाएं हैं: नई शैली और पुरानी शैली। नई शैली की कक्षाएं वे हैं जो ऑब्जेक्ट क्लास से स्पष्ट या अंतर्निहित रूप से विरासत में मिलती हैं, जबकि पुरानी शैली की कक्षाएं पायथन 2.x में हैं जिनमें बेस क्लास परिभाषित नहीं है। हालाँकि, यह अंतर __getattr__ और __getattribute__ के बीच चयन के लिए प्रासंगिक नहीं है। इसे तब लागू किया जाता है जब कोई विशेषता एक्सेस की जाती है जो ऑब्जेक्ट के शब्दकोश या उसके किसी भी आधार में नहीं पाई जाती है कक्षाएं. यह आपको उन विशेषताओं को पुनः प्राप्त करने के लिए फ़ॉलबैक तंत्र लागू करने की अनुमति देता है जो ऑब्जेक्ट पर मौजूद नहीं हैं। इस पद्धति का उपयोग आमतौर पर गतिशील विशेषता पहुंच प्रदान करने के लिए किया जाता है, जैसे कि मेटाप्रोग्रामिंग परिदृश्यों में।
__getattribute__, दूसरी ओर, ऑब्जेक्ट पर किसी भी विशेषता तक पहुंचने पर लागू किया जाता है, चाहे वह मौजूद हो या नहीं। ऑब्जेक्ट की डिक्शनरी या बेस क्लास की जाँच से पहले इसे कॉल किया जाता है। __getattribute__ को लागू करना मुश्किल हो सकता है क्योंकि इसमें अनंत पुनरावृत्ति को रोकने के लिए सावधानीपूर्वक संचालन की आवश्यकता होती है।कब उपयोग करें getattr या getattribute
संक्षेप में, __getattr__ का उपयोग तब किया जाना चाहिए जब आप लापता के लिए विशेषता पुनर्प्राप्ति को संभालना चाहते हैं विशेषताएँ, फ़ॉलबैक तंत्र प्रदान करती हैं। __getattribute__, अधिक बहुमुखी होते हुए भी, सही ढंग से लागू करने के लिए अधिक जटिल हो सकता है और आमतौर पर अधिकांश व्यावहारिक उद्देश्यों के लिए आवश्यक नहीं है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3