एनोन के उत्तर में:
"यदि आपको __init__
वर्तमान कक्षा में किए जा रहे कार्यों के अतिरिक्त सुपर से कुछ करने की आवश्यकता है __init__
, तो आपको इसे स्वयं कॉल करना होगा, क्योंकि यह स्वचालित रूप से नहीं होगा"
यह अविश्वसनीय है: वह विरासत के सिद्धांत के बिल्कुल विपरीत है।
ऐसा नहीं है कि "सुपर से कुछ __init__
(...) स्वचालित रूप से नहीं होगा" , यह है कि यह स्वचालित रूप से होता है, लेकिन ऐसा नहीं होता है क्योंकि आधार-वर्ग ' __init__
व्युत्पन्न- वर्ग की परिभाषा से अधिक है__init__
तो फिर, एक व्युत्पन्न 'क्यों' को परिभाषित करते हुए __init__
, क्योंकि यह उकसाता है कि जब कोई व्यक्ति विरासत में मिले तो क्या करना है?
ऐसा इसलिए है क्योंकि किसी को किसी ऐसी चीज़ को परिभाषित करने की ज़रूरत है जो बेस-क्लास में नहीं की गई है __init__
, और इसे प्राप्त करने की एकमात्र संभावना है कि इसका निष्पादन एक व्युत्पन्न वर्ग के __init__
फ़ंक्शन में किया जाए।
दूसरे शब्दों में, किसी को बेस-क्लास में कुछ चाहिए__init__
चाहिए होता है , इसके अलावा बेस-क्लासेज़ में स्वचालित रूप से क्या किया जाएगा ' __init__
अगर यह बाद वाला नहीं था।
इसके विपरीत नहीं।
फिर, समस्या यह है कि बेस-क्लास में मौजूद वांछित निर्देश ' __init__
तात्कालिकता के क्षण में अधिक सक्रिय नहीं हैं। इस निष्क्रियता को दूर करने के लिए, कुछ विशेष की आवश्यकता है: स्पष्ट रूप से बेस-क्लास को कॉल करना '__init__
करना , KEEP के लिए , न कि ADD के लिए, बेस क्लास द्वारा किया गया इनिशियलाइज़ेशन ' __init__
। आधिकारिक डॉक में यही कहा गया है:
एक व्युत्पन्न वर्ग में एक ओवरराइडिंग विधि वास्तव में उसी नाम के आधार वर्ग विधि को बदलने के बजाय विस्तार करना चाह सकती है । बेस क्लास पद्धति को सीधे कॉल करने का एक सरल तरीका है: बस BaseClassName.methodname (स्वयं, तर्क) को कॉल करें।
http://docs.python.org/tutorial/classes.html#inheritance
यह सब कहानी है:
जब उद्देश्य केईपी को बेस-क्लास द्वारा शुरू की गई शुरुआत है, जो कि शुद्ध विरासत है, तो कुछ विशेष की आवश्यकता नहीं है, एक को केवल परिभाषित करने से बचना चाहिए __init__
व्युत्पन्न वर्ग में फ़ंक्शन
जब उद्देश्य आधार वर्ग द्वारा किए गए इनिशियलाइज़ेशन को पुन: लागू करना है, __init__
करना है इसे व्युत्पन्न वर्ग में परिभाषित किया जाना चाहिए
जब उद्देश्य ADD प्रक्रियाओं को बेस-क्लास द्वारा किए गए इनिशियलाइज़ेशन के लिए है, तो एक व्युत्पन्न वर्ग __init__
को परिभाषित किया जाना चाहिए, जिसमें बेस क्लास के लिए एक स्पष्ट कॉल शामिल है।__init__
अनोन के पद में मुझे जो अचरज होता है, वह केवल यह नहीं है कि वह वंशानुक्रम के सिद्धांत के विपरीत व्यक्त करता है, बल्कि यह भी है कि 5 लोग बिना बालों को मोड़े हुए उस उत्थान से गुजर रहे हैं, और इसके अलावा 2 वर्षों में प्रतिक्रिया देने वाला कोई नहीं है एक धागा जिसका दिलचस्प विषय अपेक्षाकृत अक्सर पढ़ा जाना चाहिए।
object
एक टाइपो था। लेकिन अब आपके पासsuper
अपने प्रश्न का शीर्षक भी नहीं है।