【发布时间】:2021-03-30 05:32:09
【问题描述】:
class A:
def __init__(self, arg):
print("hit A")
self.arg = 1
print("close:A")
return
class B(A):
def __init__(self, arg, arg1):
print("hit B")
super().__init__(arg)
self.arg1 = arg1
print("close B")
return
class D(A):
def __init__(self, arg, arg1):
print("hit D")
super().__init__(arg)
self.arg1 = 3
print("done D")
return
class C(D, B):
def __init__(self, arg, arg1):
print("hit C")
super().__init__(arg, arg1)
print("done C")
return
c = C(1,2)
当 D 调用 A.init 时抛出 TypeError,因为缺少必需的位置参数:arg1。
我知道如何解决这种情况,但我的问题是:为什么会发生这种情况?如果您翻转 D 和 B 的顺序,错误会在 B 中引发,因此无论顺序如何都会发生错误,并且必须与 D 和 B 的编写方式有关,但仅将 arg1 传递给 A 没有意义(尽管它确实解决了它)。我显然不了解 Python 中的 super() 或多重继承。
(顺便说一句,我再也不会这样做了。这是基于一些现实生活中的代码,我使用另一种语言的组合来编写它,并且知道我在这里所做的一切都不是一个好主意。)
【问题讨论】:
标签: python python-3.x multiple-inheritance