[轉載] Mix-in技術介紹

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中實現這一技術非常容易。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章