我有两个类:A(需要一个参数进行初始化)和B(需要两个参数进行初始化),还有一个从A和B派生的第三个类C。
class A:
def __init__(self, sval):
print("A: rcd value: ", sval)
self.aval = sval
class B:
def __init__(self, sval, tval):
print("B: rcd 2 values: ", sval, tval)
self.aval=sval
self.bval=tval
class C(A,B):
def __init__(self, a, b, c):
super().__init__(a)
super().__init__(b,c) # error here
c = C(1,2,3)
当我运行以上代码时,最后一行出现错误;调用的是A类的__init__方法,而不是B类的。
A: rcd value: 1
Traceback (most recent call last):
File "inheritance.py", line 20, in <module>
c = C(1,2,3)
File "inheritance.py", line 16, in __init__
super().__init__(b,c)
TypeError: __init__() takes 2 positional arguments but 3 were given
如何在C类的__init__
函数中调用A和B类的__init__
函数?
注:我正在Debian Linux上使用Python 3.5.3,但我希望解决方案适用于Python2和Python3。
Python-2.x
和Python-3.x
标签,因为您没有指定使用哪个版本的Python,而且该解决方案适用于两个版本。 - AK47A
和B
都有名为aval
的属性,这两个属性中必须要重命名其中一个。如果你无法控制A
或B
,那么你需要为其中一个定义适配器来进行解决。 - chepnersuper
的方法是让A
和B
也使用它,然后在C.__init__
中只使用一次super
。 - chepner