TypeError:python具有不同参数的多重继承

问题描述 投票:0回答:1

我正在尝试使用多重继承将某些功能添加到我拥有的现有类之一中。问题在于,这个新类和我当前的基类在其构造函数中具有不同的参数。即新类有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'
python multiple-inheritance
1个回答
0
投票

super(A, self).__init__()中删除A.__init__A是顶级产品,因此您无需使用super__init__

© www.soinside.com 2019 - 2024. All rights reserved.