2012-03-23 12 views
18

से तर्क मैं थोड़ा उलझन में हूं कि पाइथन में सबक्लास और सुपरक्लास के बीच तर्क कैसे पारित किए जाते हैं। निम्नलिखित वर्ग संरचना पर विचार करें:सबक्लास - सुपरक्लास

class Superclass(object): 
    def __init__(self, arg1, arg2, arg3): 
     #Inilitize some variables 
     #Call some methods 

class Subclass(Superclass): 
    def __init__(self): 
     super(Subclass, self).__init__() 
     #Call a subclass only method 

जहां मुझे परेशानी हो रही है यह समझ रहा है कि सुपरक्लास और सबक्लास के बीच तर्क कैसे पारित किए जाते हैं। क्या सबक्लास प्रारंभकर्ता में सभी सुपरक्लास तर्कों को दोबारा सूचीबद्ध करना आवश्यक है? नया कहां होगा, सबक्लास केवल, तर्क निर्दिष्ट किए जाएंगे? जब मैं सबक्लास को तुरंत चालू करने के लिए उपरोक्त कोड का उपयोग करने का प्रयास करता हूं, तो यह केवल 1 तर्क की अपेक्षा करता है, न कि मूल 4 (स्वयं सहित)।

TypeError: __init__() takes exactly 1 argument (4 given) 
+1

ध्यान दें कि 'बिल्कुल 1 तर्क लेता है' भ्रमित हो सकता है, क्योंकि वह तर्क 'स्वयं' (जो स्वचालित रूप से पारित होता है) है। – katrielalex

उत्तर

17

कोई जादू नहीं हो रहा है! __init__ विधियां अन्य सभी की तरह काम करती हैं। आपको उप-वर्ग प्रारंभकर्ता में आवश्यक सभी तर्कों को स्पष्ट रूप से लेने की आवश्यकता है, और उन्हें सुपरक्लास के माध्यम से पास करना होगा।

class Superclass(object): 
    def __init__(self, arg1, arg2, arg3): 
     #Initialise some variables 
     #Call some methods 

class Subclass(Superclass): 
    def __init__(self, subclass_arg1, *args, **kwargs): 
     super(Subclass, self).__init__(*args, **kwargs) 
     #Call a subclass only method 

जब आप Subclass(arg1, arg2, arg3) फोन अजगर सिर्फ Subclass.__init__(<the instance>, arg1, arg2, arg3) कॉल करेंगे। यह जादुई रूप से superclass और कुछ subclass के कुछ तर्कों का मिलान करने की कोशिश नहीं करेगा।

संबंधित मुद्दे