python3中supper和继承顺序
""" supper() 1 实际上返回的的 是父类的实例 所以 在下方类B中的 super(B, self).go() 实际上 super(B, self) 返回的是A的实例 那么go调的也是A的go方法 2 如果出现了多继承例如:class D(B,C)的情况 super(D, self).go() 实际上会实例B,C 但是调用的时候会先调C的go方法,在调B的go 方法 然后在调d自己的 应该注意 经典类和新式类的 继承顺序 class D 调用super(D, self).go() 所以算法的计算方法为 顺序 D----B----A-----C (找到A之后 在从D找C ) 这里有点疑惑的是 为什么没有走C----A 这是因为A不是一个好的节点 好的节点: 如果 A是一个好的节点 当且仅当搜索路径中A之后的节点均不继承A 例如一下demo 按照深度优先遍历得到搜索路径DBACA 之后python 解释器 从做往右检查时发现第三个节点A不是一个好节点 因为A之后的节点C继承了A所以 将A从搜索路径中移除 所以调用顺序编程了 DBAC 打DEBUG也证实了这一点 """ class A(object): def go(self): print("in A go") def stop(self): print("in A stop") def pause(self): raise Exception("not implemented") class B(A): def go(self): super(B, self).go() print("in B go") def stop(self): print("in B stop") class C(A): def go(self): super(C, self).go() print("in C go") def stop(self): print("in C stop") class D(B,C): def go(self): super(D, self).go() print("in D go") def stop(self): print("in D stop") class E(B,C): pass if __name__ == '__main__': a=A() b=B() c=C() d=D() e=E() print("*"*120) a.go() print("*" * 120) b.go() print("*" * 120) c.go() print("*" * 120) print("in d") d.go() print(D.__mro__) print("*" * 120) e.go()