我有一个类D
,这个类继承了B
和C
这两个继承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
为什么会出现此错误?
答案 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
到B
和C
。