class A:
def p(self):
print('A')
class B(A):
def p(self):
print('B')
super().p()
class C(A):
def p(self):
self.cnt+=1
print('C')
if self.cnt<3:
super(B,self).p()
else:
super().p()
class Model(B,C):
def __init__(self):
self.cnt=0
def f(self):
super().p()
print(Model.mro())
m=Model()
m.f()
#输出:
#[, , ,
#, ]
# B
# C
# C
# C
# A
super(type_1,obj)
MRO(Method Resolution Order ):方法解析顺序,是一种在多重继承中用于确定方法搜索顺序的算法!!!
第一个参数提供一个类,第二个参数提供一个实例,表示从实例obj的MRO中的type_1类后查找对象,比如Model类的MRO就是[Model,B,C,A,object],那么super(B,Model())就是从[C,A,obj]中依次查找
如果是super(type_1,obj).fun(),那么就是根据obj的MRO,从type_1后,查找每一个类有没有fun()方法,有的话就执行然后停止
如果是在类里面使用,super()就等价于super(当前类,当前类的实例对象)
参考:Python super 详解 | 菜鸟教程
Python: super 没那么简单 - mozillazg's blog



