अजगर 2.x में, सुपर निम्नलिखित मामलोंक्यों पाइथन सुपर केवल उदाहरण स्वीकार नहीं करता है?
class super(object)
| super(type) -> unbound super object
| super(type, obj) -> bound super object; requires isinstance(obj, type)
| super(type, type2) -> bound super object; requires issubclass(type2, type)
| Typical use to call a cooperative superclass method:
स्वीकार करता है के रूप में जहाँ तक मैं देख, सुपर, एक वर्ग है एक वर्ग के सुपर क्लास को हल करने के प्रकार और (अंततः) उदाहरण लपेटकर। जैसे
- क्यों वहाँ भी कोई
super(instance)
, विशिष्ट उपयोग के साथ:मैं नहीं बल्कि चीजों की एक जोड़ी से हैरान हूँ
super(self).__init__()
। तकनीकी तौर पर, आप वस्तु से ही एक वस्तु के प्रकार प्राप्त कर सकते हैं, तो वर्तमान रणनीतिsuper(ClassType, self).__init__()
तरह का अनावश्यक है। मैं पुरानी शैली के वर्गों, या एकाधिक विरासत के साथ संगतता मुद्दों को मानता हूं, लेकिन मैं आपका बिंदु सुनना चाहता हूं। - क्यों, दूसरे हाथ पर, अजगर 3 स्वीकार करेंगे (देखें Understanding Python super() with __init__() methods)
super().__init__()
? मैं इसमें जादू का प्रकार देखता हूं, स्पष्ट ज़ेन की तुलना में स्पष्ट का उल्लंघन करना बेहतर है। मैं अधिक उपयुक्तself.super().__init__()
देखा होगा।
मुझे लगता है कि आप कक्षा बी (ए) का मतलब है: और कक्षा सी (बी): –
हालांकि, आप सही हैं। यह कभी भी बी से ए .__ init __() को कॉल करने में सक्षम नहीं होगा, क्योंकि विधि बी .__ init __() में स्वयं प्रकार सी होगा, जिसका प्रत्यक्ष सुपर बी है, ए नहीं। इसलिए बी .__ init __() को फिर से बुलाया जाएगा। –
आह आप टाइपो के बारे में सही हैं, धन्यवाद! और यह एकाधिक विरासत योजनाओं में और भी जटिल हो जाता है, मुझे लगता है कि मुझे इसके बारे में एक लिंक मिल सकता है। – u0b34a0f6ae