美文网首页
python学习笔记-tip41(多重继承)

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

作者: 黑键手记 | 来源:发表于2018-09-27 06:53 被阅读14次

    一句话,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(多重继承)

          本文链接:https://www.haomeiwen.com/subject/mmsjoftx.html