Python中的多重继承 - 调用__init__时出错

时间:2015-04-14 10:42:51

标签: python

我有一个类D,这个类继承了BC这两个继承A的类,但是当我创建了一个类{{1}的实例时发生此错误:

D

我不明白这一点。

班级johni@johni-pc:~/Draft$ python3.4 main.py Traceback (most recent call last): File "main.py", line 35, in <module> d = D() File "main.py", line 31, in __init__ super().__init__() File "main.py", line 19, in __init__ super().__init__("pg") TypeError: __init__() takes 1 positional argument but 2 were given B正在初始化班级C中的参数driver。我的档案A

main.py

为什么会出现此错误?

1 个答案:

答案 0 :(得分:5)

请注意super确保根据MRO(方法解析顺序 - 参见例如How does Python's super() work with multiple inheritance?)调用所有超类方法。 D继承自B C,因此会发生以下情况:

  • D()来电D.__init__
  • D.__init__来电B.__init__
  • B.__init__来电C.__init__ - 这是问题所在!
  • C.__init__来电A.__init__ - 我们永远不会来这里

为什么 D从两者继承而来并不清楚 - 你当然不能拥有两个driver吗?如果您确实需要处理此问题,请注意应编写所有__init__方法以采用相同的参数,例如:添加:

def __init__(self, *args):
               # ^ ^ ^ ^ this part

BC