小编典典

python多继承使用super将参数传递给构造函数

python

考虑以下python代码段

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

class B(A):
    def __init__(self, a, b):
        super(B, self).__init__(a)
        self.b = b

class C(A):
    def __init__(self, a, c):
        super(C, self).__init__(a)
        self.c = c

class D(B, C):
    def __init__(self, a, b, c, d):
        #super(D,self).__init__(a, b, c) ???
        self.d = d

我想知道我是如何能够及格abc以相应的基类的构造函数。


阅读 221

收藏
2020-12-20

共1个答案

小编典典

好吧,一般而言,在处理多重继承时,您的基类(不幸的是)应该 设计为多重继承
。类BC在你的例子都没有,这样的话你找不到适用有道superD

设计基类以进行多重继承的一种常见方法是,中级基类在其__init__方法中接受他们不打算使用的额外的args ,并将它们传递给super调用。

这是在python中执行此操作的一种方法:

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

class B(A):
    def __init__(self,b,**kw):
        self.b=b
        super(B,self).__init__(**kw)

 class C(A):
    def __init__(self,c,**kw):
        self.c=c
        super(C,self).__init__(**kw)

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

这可以被视为令人失望,但这就是事实。

2020-12-20