Python中的菱形继承问题及MRO顺序的应用

多继承的MRO顺序

多继承的菱形继承问题

格式:父类名.方法名()
子类:父类名.父类方法()
父类:父类名.父类方法()
会导致多继承的菱形继承问题:父类可能被调用两次
图示菱形继承问题:
在这里插入图片描述

菱形继承问题的解决方案:

  • super().父类方法() 保证每个类只调用一次
    子类名.__mro __ 的顺序调用继承关系/super方法(mro得到顺序)(C3算法)
  • super(指定类名,self).父类方法() 根据mro顺序调用 指定类名 下一个类的方法

注:

  • 单继承也有mro
  • 继承不是复制,类比指向
  • 多继承 super要传递所有的参数 多余的用args或kwargs保存 例如:
super().__init __(name, *args, **kwargs)  # 为避免多继承报错,使用不定长参数,接受参数
  • 单继承不能提供全部参数 例如:
super().__init __(name, age)  
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值