答えは「2つの組み合わせ」です。古いスタイルのクラスと新しいスタイルのクラスの両方で動作するinspect.getmro()
を使用して自分自身を確認することができます。それはMRO、すなわちメソッド解決順序を返す。
古いスタイルのクラスには、深さ優先の最初から最後までのベースであるMROがあります。 (これは、最も複雑なケースのために悪い考えですが、として、下位互換性を保った。)私たちは、すべての親クラスのMROが既に計算されているので、働く、このようにそれを表現することができます:新規作成については
mro(new_class) = [new_class] + mro(first_base) + mro(second_base) + ...
をスタイルクラスは、アルゴリズムが、それはまた、など
、[new_class]
で始まるが、リストmro(first_base)
、mro(second_base)
のいくつかのより巧妙なマージが続いている---と同じ基本的な考え方を使用していますが、より複雑であるこれらのベースクラスの各かどうか古いスタイルであるか新しいスタイルであるかにかかわらず、それらは既に以前に計算された独自のMROを有しており、これらのMRO(リストとして)は新しいクラスのMROを計算するために使用される唯一のものである。
woah ...明らかに質問のような人々。ありがとうございます –