关于python多重继承初始化问题

class A(object):
    def __init__(self, a):
        print '__init__ A', str(a)
        self.A = a

class B(A):
    def __init__(self, a, b):
        super(B, self).__init__(a)
        print '__init__B', str(b)
        self.B = b
        
class C(A):
    def __init__(self, a, c):
        super(C, self).__init__(a)
        print '__init__C', str(c)
        self.C = c

class D(B, C):
    def __init__(self, a, b, c):
        super(D, self).__init__(a, b, c)
        print '__init__D', str(d)
        self.D = d

shanghe = D('x', 'y', 'z', 'k')

Traceback (most recent call last):

  File "code", line 24, in <module>

    shanghe = D('x', 'y', 'z', 'k')

TypeError: __init__() takes exactly 4 arguments (5 given)

请教这份代码错在哪里?

Maxmengt
浏览 3822回答 1
1回答

清波

首先用super超类初始化多重继承时,容易引起多次继承某些祖先类,比如说楼主代码中的 class A。其次利用super超类在进行初始化过程中 也遵循 MRO(Method Resolution Order),所以比较适合一些单线继承,楼主的代码其实有点Mixin (mix in)混入的意思,从多个祖先类继承。这是就不能用super了,应该用:ParentClassName.__init__(self,args)另外,原则上不建议把继承写的太复杂。拙见,求各路大神拍砖指正
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python