多继承
一个类继承自多个类就是多继承,它将具有多个类的属性型和方法。
多继承的弊端
多继承 很好的模拟了世界,因为事物是单一继承,但是舍弃简单,必然引起复杂性,带来了冲突。
如同一个孩子继承了父母双方的特性,那么到底是眼睛更像父亲还是母亲呢?孩子究竟像谁多一点呢?
多继承的实现会导致设计的复杂度增加,所以有些高级编程语言直接舍去了多继承。
C++支持多继承,Java舍弃了多继承。
多继承可能带来二义性,例如,猫和狗都是继承自动物类,现在如果一个类多继承了猫和狗类,猫和狗都有shout方法,子类究竟继承谁的shout呢?
解决方案:
实现多继承的语言,要解决二义性,深度优先和广度优先。
Python多继承实现
class ClassName(基类1,基类2[,......]) 语句块
左图是多继承(菱形继承),右图是单一继承。
多继承带来路径选择问题,究竟继承哪个父类的特征呢?
Python使用了MRO(method resolution order 方法解析顺序)解决基类的搜索顺序问题。
多继承的缺点
当类很多且继承复杂的情况下,继承路径太多,很难说清楚什么样的继承路径,Python语法是允许多继承,但Python代码是解释器执行,只有执行到的时候才知道发现错误,团队协作开发,如果引入多继承,那代码很可能失控。
不管编程语言是否支持多继承,都应该避免多继承,Python的面向对象,我们看到了太灵活了,太开放了,所以需要团队守规矩。
MIXIN
类有一下继承关系
文档Document类是其他所有文档类的抽象基类,Word,PDF类是Document的子类。
需求:为Document子类提供打印功能