1.Mixin
Mixin 即 Mix-in,翻译过来就是所谓的 “混入” 或者 “乱入”(也有音译为 “迷因”),它是一种设计模式。
所谓设计模式,就是利用编程语言已有的特性,针对面向对象开发过程中,反复出现的问题,而设计出来的解决方案。
为了更好地解释什么是 Mixin,我们先来看一段代码:
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def say(self):
print(f"我叫{self.name},今年{self.age}岁。")
class Pig(Animal):
def special(self):
print("我的技能是拱大白菜~")
p = Pig("大肠", 5)
p.say()
p.special()
代码实现如下:
好,现在由于剧情需要,我们要让大肠起飞……
问一下大家,咱们有没有办法在不修改原有类的代码结构的前提下,让大肠,也就是猪,飞起来?
其实仔细思考一下并不难,我们可以写一个类,它的功能就是起飞,然后让 Pig 类去继承它:
...
class FlyMixin:
def fly(self):
print("哦豁,我还会飞~")
class Pig(FlyMixin, Animal):
def special(self):
print("我的技能是拱大白菜~")
p = Pig("大肠", 5)
p.say()
p.special()
p.fly()
代码实现如下:
我叫大肠,今年5岁。
我的技能是拱大白菜~
哦豁,我还会飞~
2.经典案例分析
class Displayer:
def display(self, message):
print(message)
class LoggerMixin:
def log(self, message, filename="logfile.txt"):
with open(filename, "a") as f:
f.write(message)
def display(self, message):
super().display(message)
self.log(message)
class MySubClass(LoggerMixin, Displayer):
def log(self, message):
super().log(message, filename="subclasslog.txt")
subclass = MySubClass()
subclass.display("This is a test.")
supper()依赖mro顺序寻找的