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

多继承的MRO顺序

多继承的菱形继承问题

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

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

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

注:

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

猜你喜欢

转载自blog.csdn.net/weixin_44850984/article/details/89813484