9

私は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 では後で発生します。

何が起きてる?

4

1 に答える 1