2011-10-02 15 views
15

एक:पायथन: सुपर और __init __() बनाम __init __ (स्वयं)

super(BasicElement, self).__init__() 

बी:

super(BasicElement, self).__init__(self) 

ए और बी के बीच क्या अंतर है? अधिकांश उदाहरण जिन्हें मैं उपयोग ए में चलाता हूं, लेकिन मैं एक ऐसे मुद्दे पर चल रहा हूं जहां ए माता-पिता __init__ फ़ंक्शन को कॉल नहीं कर रहा है, लेकिन बी है। यह क्यों हो सकता है? किसका उपयोग किया जाना चाहिए और किस मामले में?

+1

कोड जहां 'b' काम करता दिखाएं। आपका मतलब क्या है "ए 'कॉल नहीं कर रहा है"? क्या आपको कोई त्रुटि मिलती है? क्या होता है? क्या 'ए .__ init__'' स्वयं 'के अलावा पैरामीटर लेता है? – agf

उत्तर

23

आपको उस दूसरे फॉर्म को करने की आवश्यकता नहीं है, जब तक कि किसी भी तरह BasicElement क्लास __init__ कोई तर्क नहीं लेता।

class A(object): 
    def __init__(self): 
     print "Inside class A init" 

class B(A): 
    def __init__(self): 
     super(B, self).__init__() 
     print "Inside class B init" 

>>> b = B() 
Inside class A init 
Inside class B init 

या वर्गों कि init तर्क की जरूरत के साथ:

class A(object): 
    def __init__(self, arg): 
     print "Inside class A init. arg =", arg 

class B(A): 
    def __init__(self): 
     super(B, self).__init__("foo") 
     print "Inside class B init" 

>>> b = B() 
Inside class A init. arg = foo 
Inside class B init  
+5

इस निर्माण के बारे में महत्वपूर्ण यह है कि सुपर क्लास ए को स्पष्ट रूप से ऑब्जेक्ट से लिया जाना चाहिए। बस 'कक्षा ए:' घोषित करने के लिए अपवाद उठाएगा 'टाइपरर: सुपर इनिट कॉल का आह्वान होने पर टाइपबॉज नहीं होना चाहिए'। – parvus

+0

कक्षा ए ऑब्जेक्ट से प्राप्त होना चाहिए !!!! कक्षा ए ऑब्जेक्ट से प्राप्त होना चाहिए !!!! कक्षा ए ऑब्जेक्ट से प्राप्त होना चाहिए !!!! नोटिस के लिए तीन बार दोहराएं। – bourneli

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