Python学习笔记 类的继承中super()的意义

class a1:
    def p(self):
        print("class a1!")


class a2:
    def p(self):
        print("class a2!")



class a(a1,a2):
    def p(self):
        print("class a!")


class b1:
    def p(self):
        print("class b1!")


class b2:
    def p(self):
        print("class b2!")



class b(b1,b2):
    def p(self):
        print("class b!")

class ab(a,b):
    def p(self):
        print("class ab")

x=ab()
x.p()#class ab
super(ab,x).p()#"ab"的第一个超类是:class a
super(a,x).p()#"a"的第一个超类是:class a1
super(a1,x).p()#"a1"没有超类,但a的第二个超类是:class a2
super(a2,x).p()#"a2"没有超类,并且a的超类都检索过了,但是"ab"有第二个超类是:#class b

super(b,x).p()#"b"的第一个超类是:class b1
super(b1,x).p()#"b1"没有超类,但b的第二个超类是:class b2
super(b2,x).p()#"b2"没有超类,并且b的超类都检索过了,而且"ab"的超类也都检索过了,于是出错了

super() 函数是用于调用父类(超类)的一个方法。

super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表

本列中这张表的顺序为:
ab ---->a---->a1---->a2---->b---->b1---->b2

你可能感兴趣的:(Python学习)