Mixin
1. 什么是Mixin
Mixin(mix-in)混入,是一种设计思想或者设计模式,本身并不是代码逻辑或者方法,只是一种理念,很多面向对象的编程语言都有Mixin的设计模式。
2. 为什么用Mixin
Mixin,出现在多重继承的场景中,一般用于功能扩展,而不作为实体父级类。
举个例子:
# -*- coding:utf-8 -*-
class A():
def func01():
print('A func01')
class BMixin():
def flyable():
print('I cam fly')
class C(A,BMixin):
pass
可以看见B类在起名时给后面加了Mixin的后缀,说明BMixin是一个混入类,并不是所有类都可以从理念上定义为Mixin类,它必须遵循以下约定:
3. 什么样的类可以成为Mixin类
- Mixin类里只包含功能且不能被实例化。就比如鸟会飞,鸟是一个实体类,飞是一种功能,飞的这个功能如果提出来作为一个类class Bird(FlyMixin),这种类FlyMixin就算实例化了也没啥意义。
- Mixin类功能单一,如果有多个功能,那就写多个Mixin类,拆的很细,鸟会飞和鸟能拉屎你就可以写成两个Mixin类来使用(粗糙了)。
- Mixin类不依赖子类,子类也不是一定依赖Mixin类。毕竟鸟会不会飞,不是说他不不会飞我们就说他是一只狗。
4. 注意事项
Mixin好用可不要贪杯,毕竟如果你的类变成这样:
class A(BMixin,CMixin,DMixin)
如果BMixin,CMixin,DMixin中有相同方法名的方法或者super,就会让你的阅读如同鸭溪。
总之,我的理解,能简化继承结构,就不要搞多重继承的Mixin混入。
毕竟头发少掉一根是一根,你说呢?