python之super()调用顺序


super()调用的顺序

  1. 根据实例对象所在类创建一个固定的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
  1. super()是调用类,顺序按照对象所在类的MRO列表,一确定就固定了。但是super()调用的类,未必调用同一个方法,不影响super()调用顺序。