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