gpt4 book ai didi

python - 多重继承——为什么 super 不遵循 MRO 原则?

转载 作者:行者123 更新时间:2023-11-28 20:55:21 26 4
gpt4 key购买 nike

例子:

class A:
def test(self):
print(" test of A called ")
class B(A):
def test(self):
print(" test of B called ")
super().test()
class C(A):
def test(self):
print(" test of C called ")
super().test()
class D(B,C):
def test(self):
print(" test of D called ")
super().test()
obj=D()
obj.test()

输出为:D、B、C、A

根据 MRO 原则,我期待 D、B、A。获得输出 D、B、A 需要什么改变?

最佳答案

super 在父类(super class)内部时遵循 MRO 链,而不是继承链。

因此,super().test()D.test 中调用了 B.test,而 super() B.test 中的 .test() 调用 D 的 MRO 链中的下一个 test -- 即 C.测试。而 C.test 中的 super().test() 最终会调用 A.test

因此,B 中的 super().test() 调用了 D 的下一个父类(super class)的 test() ,它是 B.test,而不是它自己的父类(super class) A.test

关于python - 多重继承——为什么 super 不遵循 MRO 原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57030095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com