Python2.3以降の新しいクラスは、メソッドの検索順序(MRO, Method Resolution Order)が「C3線形化」というアルゴリズムに変更されている。このアルゴリズムについて解説する。 まずは実例。 >>> class A(object): x = "a" >>> class B(A): pass >>> class C(A): x = "c" >>> class D(object): x = "d" >>> class E(B, C, D): pass >>> e = E() >>> e.x 'c' クラスの検索順序が深さ優先探索ではないことがわかると思う。 C3線形化の特徴はメソッドを探す順番が クラスXがYを継承しているなら必ずXがYより先にくる クラスXがY, Zという順で継承しているならYは必ずZより先に来る 他のクラスのメソッド探索順でXがYより先に来ている

