2010-05-18 49 views
7

是否有可能在python和接口的各種實現中創建類接口。在python中創建接口和可交換實現

示例:我想創建一個pop3訪問類(以及所有方法等)。如果我使用商業組件,我想包裝它以遵守合同。在未來,如果我想使用另一個組件或自己的​​代碼,我希望能夠將事情交換出去,而不是將事情緊密結合起來。

可能嗎?我是python的新手。

回答

0

是的,這是可能的。這樣做通常沒有障礙:只保留一個穩定的API並改變實現它的方式。

2

當然。在這種情況下,不需要創建基類或接口,因爲一切都是動態的。

7

對於來自強類型語言背景的人來說,Python不需要類接口。你可以使用基類來模擬它。

class BaseAccess: 
    def open(arg): 
    raise NotImplementedError() 

class Pop3Access(BaseAccess): 
    def open(arg): 
    ... 

class AlternateAccess(BaseAccess): 
    def open(arg): 
    ... 

但是,您可以在不使用BaseAccess的情況下輕鬆編寫相同的代碼。強類型語言在編譯期間需要用於類型檢查的接口。對於Python,這不是必須的,因爲在運行時動態查找所有內容。其原理爲Google 'duck typing'

在Python 2.6中添加了抽象基類模塊。但我沒有用過它。

+0

感謝msw。我不知道一個用戶可以編輯另一個用戶的回覆:) – 2010-05-18 19:47:21

+0

是的,但僅限於良好的力量。實際上,這是一時興起的,因爲我沒有寫下你寫得很好的答覆。 http://stackoverflow.com/faq(靠近底部) – msw 2010-05-18 20:59:09

1

一種選擇是使用zope interfaces。但是,正如Wai Yip Tung所述,您不需要使用接口來獲得相同的結果。

zope.interface軟件包實際上更像是一種用於發現如何與對象進行交互的工具(通常在具有多個開發人員的大型代碼庫中)。