一句话,python可以多重集成,纠其原因,大致是没有“接口”这么一讲吧
如果还是不理解,可以想象一下动物的分类
动物 划分的话 一般按照 哺乳
鸟类
这两个类型进行划分
但是动物又有 可以飞行的
陆地跑的
水中游的
等等分类
如果按照java来说,我们可以通过接口去扩展这些行为,但是python没有接口,只能通过多重继承实现,说是多重继承,其实大致意思和接口意思是一样的
我们还是按照这个动物的分类来写一个例子吧
扩展一下:Mixin(中文意思:混合)
何为Mixin
就像上方例子张的Bat ,他的主线是Bird类,但是想给他更多的功能,就让他再次继承了Flyable类,这种设计通常称为Mixin
Mixin设计的目的
就是给一个类增加多个功能,在设计类的时候,我们优先考虑通过多层继承来组合多个Mixin的功能,而不是设计多层次复杂的继承关系
Python自带的很多库也使用了Mixin的设计
比如网络服务类:TCPServer和UDPServer
而网络服务类必然会提供给多个用户,那么多用户使用,需要用到多进程和多线程的的类
如:ForkingMixin(Fork有分支、岔的意思,这里表示进程)、ThreaddingMixin。
通过将上面的两类 模型进行组合,就能得到合适的服务。
如下:
多进程模式的TCP服务
class MyTCPServer(TCPServer,ForkingMixin):
pass
多线程模式的UDP服务
class MyUDPServer(UDPServer,ThreaddingMixin):
pass
这样一来,我们就不需要构造复杂的庞大的继承链条,只需要组合不同类的功能
就能快速构造出我们所需的子类
总结
Mixin会用的很广泛
注意:单一继承的语言:java等,不能使用Mixin设计