这种情况我们只要知道 MRO 序列,无论super怎么变化都不怕了,记住公式就完事了。...super本身其实就是一个类,super()其实就是这个类的实例化对象,它需要接收两个参数 super(class, obj),它返回的是obj的MRO中class类的父类(可能有点绕,待会看后面的栗子就好懂了...super(C, d).p()
前面我们说过super的作用是 返回的是obj的MRO中class类的父类,在这里就表示返回的是d的MRO中C类的父类:
返回的是d的MRO:(D, C, A, B, object...)
中C类的父类:A
那么super(C, d)就等价于A,那么super(C, d).p()会输出A
栗子2
下面代码结果是什么呢?...super(A, c).p()
返回的是c的MRO中A类的父类:
返回的是c的MRO:(C, A, B, object)
中C类的父类:B
所以最后的输出是B
最后几个栗子
注意:有的类里面没有super