私はPython Multiple Inheritance (on Programiz)を読んでいましたが、この StackOverflow の質問であるMethod Resolution Order (MRO) in new-style classes?を見つけました。しかし、この質問では、Alex Martelli のような一部のプログラマーが、深さ優先アプローチを使用していると述べていますが、私には疑問があります。
例:
class H():
def m(self):
print("H")
class G(H):
def m(self):
print("G")
super().m()
class I(G):
def m(self):
print("I")
super().m()
class F(H):
def m(self):
print("F")
super().m()
class E(H):
def m(self):
print("E")
super().m()
class D(F):
def m(self):
print("D")
super().m()
class C(E, F, G):
def m(self):
print("C")
super().m()
class B():
def m(self):
print("B")
super().m()
class A(B, C, D):
def m(self):
print("A")
super().m()
x = A()
x.m()
したがって、MRO に基づいてグラフを作成すると、深さ優先に従って次のようになります。
パスは次のようになります。
A-->B-->C-->E-->F-->G-->D-->H
しかし、上記のコードを実行すると、次のようになります。
A
B
C
E
D
F
G
H
次のパスをたどっているためです。
A-->B-->C-->E-->D-->F-->G-->H
現在、ノード「D」またはクラス「D」について、最初に詳細が混乱し、MRO では後で発生します。
何が起きてる?