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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值