30---多继承解决方案--mixins机制

一 多继承产生的问题

多继承实际上提高了耦合程度,但是面向对象的编程思想就是解耦合,解耦合的目的就是提高代码的可读性和可扩展性
而多继承与面向对象的思想是相悖的,因此python解释器提供了mixins机制

二 mixins机制

  • 核心
就是在多继承的背景下尽可能提升多继承的可读性
为了满足人类的思维习惯  什么 是 什么
简单来说mixins机制指的是子类混合不同类的功能,这些类采用不同的命名规范,以标识这些类只是用来混合功能的,并不是用来表示子类的从属 什么 是 什么 的关系
mixins机制本质仍然是多继承
  • 举例
车  船  直升机 民航飞机都是交通工具,但是只有飞机具有 飞 的功能,如果将 飞 的功能添加到交通工具这个父类中是不合理的,所以可以将 飞 这个功能另外定义,采用统一的命名规范(例如Mixin后缀),这个后缀会明确的告诉读代码的人,这个类是作为一个功能添加到子类中,而不是作为父类,当飞机这个类不混合 飞 的功能,飞机只是失去了飞的功能的一个交通工具
class Vehicle:  # 交通工具
    pass


class FlyableMixin:
    def fly(self):
        '''
        飞行功能相应的代码
        '''
        print("I am flying")


class CivilAircraft(FlyableMixin, Vehicle):  # 民航飞机
    pass


class Helicopter(FlyableMixin, Vehicle):  # 直升飞机
    pass
注意:
使用Mixin类实现多重继承要非常小心

1 必须表示某一种功能,而不是某个物品,python 对于mixin类的命名方式一般以 Mixin, able, ible 为后缀
2 它必须责任单一,如果有多个功能,那就写多个Mixin类,一个类可以继承多个Mixin,为了保证遵循继承的“is-a”原则,只能继承一个标识其归属含义的父类
然后,它不依赖于子类的实现
3  子类即便没有继承这个Mixin类,也照样可以工作,就是缺少了某个功能。(比如飞机照样可以载客,就是不能飞了)

 Mixins是从多个类中重用代码的好方法,但是需要付出相应的代价,我们定义的Minx类越多,子类的代码可读性就会越差,并且更恶心的是,在继承的层级变多时,代码阅读者在定位某一个方法到底在何处调用时会晕头转向

posted @ 2020-04-12 20:05  微信搜索-程序媛小庄  阅读(228)  评论(0编辑  收藏  举报