我正在尝试使用多重继承将某些功能添加到我拥有的现有类之一中。问题在于,这个新类和我当前的基类在其构造函数中具有不同的参数。即新类有1个额外的参数。经过一番谷歌搜索后,我了解到可以将** kwargs添加到当前基类(少一个参数的类)。示例:
class A(object):
def __init__(self, a):
super(A, self).__init__()
print('init A', a)
class B(A):
def __init__(self, a, **kwargs):
super(B, self).__init__(a)
print('init B', a)
class C(object):
def __init__(self, a, x):
super(C, self).__init__()
print('init C', a, x)
class D(B, C):
def __init__(self, a, x):
super(D, self).__init__(a, x=x)
print('init D', a, x)
for c in D.__mro__:
print(c)
print('-' * 20)
b = D(1, 2)
但我收到此错误:
<class '__main__.D'>
<class '__main__.B'>
<class '__main__.A'>
<class '__main__.C'>
<class 'object'>
--------------------
Traceback (most recent call last):
File "/tmp/c.py", line 30, in <module>
b = D(1, 2)
File "/tmp/c.py", line 21, in __init__
super(D, self).__init__(a, x=x)
File "/tmp/c.py", line 9, in __init__
super(B, self).__init__(a)
File "/tmp/c.py", line 3, in __init__
super(A, self).__init__()
TypeError: __init__() missing 2 required positional arguments: 'a' and 'x'
从super(A, self).__init__()
中删除A.__init__
。 A
是顶级产品,因此您无需使用super
的__init__
。