转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826299.html
一:Mixin模式
Mixin编程是一种开发模式,是一种 将多个不同类中的功能单元的进行组合利用的方式。
Mixin模式是通过python的多继承机制实现的,但是又与单纯的类继承有所区别:
1)用作Mixin的类,不作为任何类的基类;
2)用做Mixin的类不关心将会和什么类一起被继承使用,它只会在子类定义时按需继承进来;
3)用作Mixin的类通常都会实现一种通用的功能,相当于一种工具箱,即插即用;
二:Mixin模式的优势
1) 可以在不修改任何已有类的源代码的情况下,对已有类进行功能扩展;
2)可以保证组件化编程,将可复用的功能封装为一个Mixin类,按需继承使用;
3)子类可以根据需要,使用已有的Mixin功能类们进行组合,来实现“新的自己”;
4)突破了类继承的局限性,以往扩展新功能需要开发新的子类,现在只需要在自身的多继承中添加一个Mixin类即可。
三:Mixin的原理
首先我们来看一下Python类的一个隐藏属性:__mro__
This attribute is a tuple of classes that are considered when looking for base classes during method resolution.
它的值是一个元组,元组的元素是该类所继承的类。当子类中调用self.method()或super()时,方法调用会从子类自身查起,沿着继承链条(__mro__属性数组从左到右的顺序)逐个类 地检索符合的方法并调用。
因此,我们通过Mixin模式为某类添加了新的内容后,在子类中可以直接通过self.method()或super().method()即可无误地调用到我们插入进来的功能啦。