考虑以下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
我想知道我是如何能够及格a,b并c以相应的基类的构造函数。
a
b
c
好吧,一般而言,在处理多重继承时,您的基类(不幸的是)应该 设计为多重继承 。类B和C在你的例子都没有,这样的话你找不到适用有道super的D。
B
C
super
D
设计基类以进行多重继承的一种常见方法是,中级基类在其__init__方法中接受他们不打算使用的额外的args ,并将它们传递给super调用。
__init__
这是在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
这可以被视为令人失望,但这就是事实。