どのようなPythonのメソッド解決順序(MRO)のメカニズムを忘れないでください

pythonを使用していた内容はそれほど完全に飛ぶことはほとんどないだろう、文書に問題が発生します回し、料理とダイレクトラインやドキュメントライブラリを保持しています。

私は突然私の死角に触れたとき、今日この例を参照してください、私が最初にバインドされます。この継承階層コールsuper.foo()わかりません。私が書いた前のクラス階層なので、このライブラリは、それほどエレガント行かないことはありません。

出会いの問題ので、この問題を解決するために、理解することが必要です。読むの公式文書を、多重継承の場合のpython、親クラスが最初のリンクを継承するすべての機能がバインドされたときの最初の出会いの後に残され、その後、内部のリストを入れ、その後、マージ、および一致したときに直接結合。

ポー次のコード。

 
 
クラスA:
DEF FOO(自己):
印刷("A")


クラスB(A):
DEF FOO(自己):
スーパー(B セルフ).fooという()
プリント("B")


クラスC(B 、A) :
DEF FOO(自己):
スーパー(C 自己).fooという()
プリント("C")


クラスD(C):
DEF FOO(自己):
スーパー(D 自己).fooという()
プリント("D" )


クラスE(D 、C):
合格


= A()
B = B()
C = C()
、D = D()
E = E()

a.foo()
印刷("「)
b.foo()
印刷(" ")
c.foo()
印刷(" ")
d.foo()
印刷("")
e.foo()
 

回答:

ドキュメントの計算方法によると、

L(A)= O

L(B)= B AO

L(C)はCマージ(INCLUDING、AO、BA)はCBAOを==します

L(D)= DCBAO

L(E)= E +マージ(DCBAO、CBAO、DC)= EDCBAO

 

そうスーパー例えば(タイプ、自己).fooという()メソッドが結合されて上記溶液に従って導出されます。

 

おすすめ

転載: www.cnblogs.com/jason-koo/p/11504078.html