Mix-in技術,中文不知道應該如何稱呼,但意思好象是混入。它的作用是,在運行期間,動態改變類的基類或類的方法,從而使得類的表現可以發生變化。可以用在一個通用類接口中,根據不同的選擇使用不同的低層類實現,而高層類不用發生變化。而且這一實現可以在運行過程中動態進行改變。由於我也是剛看到,大家有問題可以與我進行交流。這就是我看到的文章的鏈接。
下面再詳細向大家介紹一下:
有一個類,
class foo:pass
我可以定義另外一個類,
class foobase:def hello(self):
print "hello"
如果我直接調用:
>>> obj=foo()>>> obj.hello()
這時你會看到出錯。那麼我可以這樣:
>>> foo.__bases__ += (foobase,)>>> obj.hello()
>>> hello
成功了。
原理是,每個類都有一個__bases__屬性,它是一個tuple,用來存放所有的基類。而且在運行中,可以動態改變。所以當我們向其中增加新的基類時,再次調用原來不存在的函數,由於基類中的函數已經存在了,所以這次成功了。
這是一個最簡單的應用,可以看到我們可以動態改變類的基類。有幾個注意事項要說一下:
1. __bases__是一個tuple,所以增加一個值要使用tuple類型,而單個元素tuple的寫法爲(foobase,)
2. 類必須先存在。所以,如果想使用這一技術,先要將相關的類的模塊導入(import)。
由於Mix-in是一種動態技術,以多繼承,對象爲基礎,而python正好是這樣的語言,使得在python中實現這一技術非常容易。