class H: def bar(self): print("h bar") class G(H): def bar(self): print("g bar") class F(H): def bar(self): print("f bar") class E(G): def bar(self): print("e bar") class D(F): def bar(self): print("d bar") class C(E): def bar(self): print("c bar") class B(D): def bar(self): print("b bar") class A(B,C,D): def bar(self): print("a bar") print(A.mro()) # [<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.D'>, <class '__main__.F'>, # <class '__main__.E'>, <class '__main__.G'>, <class '__main__.H'>, <class 'object'>] # [B,C,D] #[B.D.F,H], [C,E,G,H],[D,F,H] # c3算法 # 先找B头,放到一个列表里面, #[B,C,D.F,E,G,H] # [H], [E,G,H],[H] [] # c3算法就是先把继承关系最下面A的父类找出来。再以每个父类为头[B,C,D],找到其所有的父类[B.D.F,H], [C,E,G,H],[D,F,H]。然后以[B,C,D]中B开头,发现有两个B头 #第一个为B,去掉每个列表里面的B,同理得到C,D。这样继承顺序为B,C,D [],[F,H] [E,G,H],[F,H],再看剩下的列表里面,F开头的比E多,取F,去掉F,[H], [E,G,H],[H] # 现在发现H有两个头,但是还有一个H不在头上,不取,所以依次取E,G,H