python学习笔记-tip41(多重继承)

一句话,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设计

你可能感兴趣的:(python学习笔记-tip41(多重继承))