super()调用的顺序
- 根据实例对象所在类创建一个固定的MRO列表,来确定super()调用的类顺序:
class Cat(object):
def test(self):
print("Cat")
class BlueCat(Cat):
def test(self):
super().test() #调用Mro列表中BuleCat右边的类的方法,不同的MRO,右边类不一样
class RedCat(Cat):
def test(self):
print("RedCat")
class C(BlueCat,RedCat):
def test(self):
super().test() #调用Mro列表中C右边的类的方法,不同的MRO,右边类不一样
cc = C() #根据对象cc所属于的类C创建MRO,c调用test方法时,各层级类super()追溯的类顺序是固定的,按照对象cc所在类C的MRO找。
dd = BlueCat() #根据对象dd所属于的类BuleCat创建MRO,dd调用test方法时,各层级类super()追溯的类顺序是固定的,按照对象dd所在类BlueCat的MRO找。
cc.test()
dd.test()
#结果
RedCat
Cat
- super()是调用类,顺序按照对象所在类的MRO列表,一确定就固定了。但是super()调用的类,未必调用同一个方法,不影响super()调用顺序。