# # -*- coding: UTF-8 -*- # 多继承中:子类的对象调用一个方法,默认就近原则 # 新式类中:广度优先 # 经典类:深度优先 # python2.7 新式类和经典类共存,新式类要继承object # python3 只有新式类,默认继承object # 经典类和新式类还有一个区别:mro方法只在新式类中存在 super 只在python3中存在 # super本质:不是直接父类,而是根据调用者的节点位置广度优先顺序来 class A: def func(self):print('A') class B(A):pass #def func(self):print('B') class C(A): def func(self):print('C') class D(B,C):pass #def func(self):print('D') d = D() d.func() print('-----------------------------------------') class A: def func(self):print('A') class B(A):pass #def func(self):print('B') class E: def func(self):print('E') class C(E):#pass def func(self):print('C') class D(B,C):pass #def func(self):print('D') d = D() d.func() print('-----------------------------------------') class F: def func(self):print('F') class A(F):pass #def func(self):print('A') class B(A):pass #def func(self):print('B') class E(F):#pass def func(self):print('E') class C(E):pass #def func(self):print('C') class D(B,C):pass #def func(self):print('D') d = D() d.func() print(D.mro()) #super本质:不是直接父类,而是根据调用者的节点位置的广度优先顺序来的 class A: def func(self): print('A')#9 class B(A): def func(self):#5 super().func()#6 print('B')#11 class C(A): def func(self):#7 super().func()#8 print('C')#10 class D(B,C): def func(self): #3 super().func()#4 print('D')#12 d = D() #1 d.func()#2