python3.0不存在,舊版本可能報錯:
class A(): def __init__(self): print('A')class B(): def __init__(self): print('B')class C(): def __init__(self): print('C')class Asub(A): def __init__(self): print('Asub') super(Asub, self).__init__()class Bsub(B): def __init__(self): print('Bsub') super(Bsub,self).__init__()class Csub(C): def __init__(self): print('Csub') super(Csub, self).__init__()class E(Asub, Bsub, Csub): def __init__(self): print ('E') Asub.__init__(self) Bsub.__init__(self) Csub.__init__(self)d = E()
在子類Asub中調用super初始化時發生錯誤:其中A為超類,仔細檢查並無語法錯誤。 super(Asub, self).init() TypeError: super() argument 1 must be type, not classobj 原因如下: 在python2.2版本之前,直接調用超類的方法,後來改成通過super來調用,原因是為瞭解決多重繼承中的鑽石形狀問題。python裡的super只能用在新式類中,不能用於以前的經典類,如果基類是經典類則會出現這個錯誤。 解決的方法是Asub只要有一個超類是Object就OK了。 例如: A(object):…………….
class A(object):#!!!!!!!based in object!!!!!! def __init__(self): print('A')class B(object): def __init__(self): print('B')class C(object): def __init__(self): print('C')class Asub(A): def __init__(self): print('Asub') super(Asub, self).__init__()class Bsub(B): def __init__(self): print('Bsub') super(Bsub,self).__init__()class Csub(C): def __init__(self): print('Csub') super(Csub, self).__init__()class E(Asub, Bsub, Csub): def __init__(self): print ('E') Asub.__init__(self) Bsub.__init__(self) Csub.__init__(self)d = E()
注意:構造類的時候,習慣性繼承基類object!!!