我对super.I的概念不熟悉我无法理解此代码中每个类的m方法所做的调用堆栈
class A:
def m(self):
print("m of A called")
print("OUT OF A")
class B(A):
def m(self):
print("m of B called")
super().m()
print("OUT OF B")
class C(A):
def m(self):
print("m of C called")
super().m()
print("OUT OF C")
class D(B,C):
def m(self):
print("m of D called")
super().m()
print("OUT OF D")
x = D()
x.m()
以下输出为:
m of D called
m of B called
m of C called
m of A called
OUT OF A
OUT OF C
OUT OF B
OUT OF D
如何从D调用B.()和C.()只调用A.m()一次
答案 0 :(得分:0)
可以在此处找到解释:https://docs.python.org/3.6/library/functions.html#super
基本上你得到的是超类或兄弟(具有多重继承)
来自链接:
第二个用例是支持合作多重继承 动态执行环境。这个用例是Python和Python独有的 在静态编译的语言或语言中找不到 支持单继承。这使得实现成为可能 “菱形图”,其中多个基类实现相同的 方法。好的设计要求此方法具有相同的调用 在每种情况下签名(因为呼叫的顺序是在 运行时,因为该顺序适应类层次结构中的更改, 并且因为该顺序可以包括未知的兄弟类 在运行之前)。