混入
在面向对象编程语言中,mixin 是一个包含其他类使用的方法的类,而不必是其他类的父类。其他类如何访问 mixin 的方法取决于语言。
它通过允许多个类使用公共功能,但没有多重继承的复杂语义,提供了多重继承的机制。当程序员想要在不同类之间共享功能时,Mixins 很有用。不是一遍又一遍地重复相同的代码,而是可以简单地将公共功能分组为 mixin,然后将其继承到需要它的每个类中。
当我们使用多个 mixins 时,mixin 的顺序非常重要。这是一个简单的例子:
class Mixin1(object):
def test(self):
print "Mixin1"
class Mixin2(object):
def test(self):
print "Mixin2"
class MyClass(Mixin1, Mixin2):
pass
在这个例子中我们称之为 MyClass
和 test
方法,
>>> obj = MyClass()
>>> obj.test()
Mixin1
结果必须是 Mixin1,因为订单是从左到右。当超级类添加它时,这可能会显示意外的结果。所以逆向顺序更好,就像这样:
class MyClass(Mixin2, Mixin1):
pass
结果将是:
>>> obj = MyClass()
>>> obj.test()
Mixin2
Mixins 可用于定义自定义插件。
Python 3.x >= 3.0
class Base(object):
def test(self):
print("Base.")
class PluginA(object):
def test(self):
super().test()
print("Plugin A.")
class PluginB(object):
def test(self):
super().test()
print("Plugin B.")
plugins = PluginA, PluginB
class PluginSystemA(PluginA, Base):
pass
class PluginSystemB(PluginB, Base):
pass
PluginSystemA().test()
# Base.
# Plugin A.
PluginSystemB().test()
# Base.
# Plugin B.