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