Python-面向对象之多继承

多继承

一个类继承自多个类就是多继承,它将具有多个类的属性型和方法。

多继承的弊端

多继承 很好的模拟了世界,因为事物是单一继承,但是舍弃简单,必然引起复杂性,带来了冲突。

如同一个孩子继承了父母双方的特性,那么到底是眼睛更像父亲还是母亲呢?孩子究竟像谁多一点呢?

多继承的实现会导致设计的复杂度增加,所以有些高级编程语言直接舍去了多继承。

C++支持多继承,Java舍弃了多继承。

多继承可能带来二义性,例如,猫和狗都是继承自动物类,现在如果一个类多继承了猫和狗类,猫和狗都有shout方法,子类究竟继承谁的shout呢?

解决方案:

实现多继承的语言,要解决二义性,深度优先和广度优先。

Python多继承实现

class ClassName(基类1,基类2[,......])
    语句块

 左图是多继承(菱形继承),右图是单一继承。

多继承带来路径选择问题,究竟继承哪个父类的特征呢? 

Python使用了MRO(method resolution order 方法解析顺序)解决基类的搜索顺序问题。

多继承的缺点

当类很多且继承复杂的情况下,继承路径太多,很难说清楚什么样的继承路径,Python语法是允许多继承,但Python代码是解释器执行,只有执行到的时候才知道发现错误,团队协作开发,如果引入多继承,那代码很可能失控。

不管编程语言是否支持多继承,都应该避免多继承,Python的面向对象,我们看到了太灵活了,太开放了,所以需要团队守规矩。

MIXIN

类有一下继承关系

 文档Document类是其他所有文档类的抽象基类,Word,PDF类是Document的子类。 

需求:为Document子类提供打印功能

猜你喜欢

转载自www.cnblogs.com/alrenn/p/12922052.html