混入

在物件導向程式語言中,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

在這個例子中我們稱之為 MyClasstest 方法,

>>> 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.