我们经常在类的__init__函数里看到super的身影,而且一般都是写成这个样子的super(className, self).__init__(),self其实就是某个实例化的对象。...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...,super()就表示前一个父类,这里就是C类,那么super().p()就会调用C的p函数,但是C.p里没有调用super,所以就与A,B类无关了,那么最终的输出就是C,D
我们再看看最复杂的继承情况