是否有可能在python和接口的各種實現中創建類接口。在python中創建接口和可交換實現
示例:我想創建一個pop3訪問類(以及所有方法等)。如果我使用商業組件,我想包裝它以遵守合同。在未來,如果我想使用另一個組件或自己的代碼,我希望能夠將事情交換出去,而不是將事情緊密結合起來。
可能嗎?我是python的新手。
是否有可能在python和接口的各種實現中創建類接口。在python中創建接口和可交換實現
示例:我想創建一個pop3訪問類(以及所有方法等)。如果我使用商業組件,我想包裝它以遵守合同。在未來,如果我想使用另一個組件或自己的代碼,我希望能夠將事情交換出去,而不是將事情緊密結合起來。
可能嗎?我是python的新手。
是的,這是可能的。這樣做通常沒有障礙:只保留一個穩定的API並改變實現它的方式。
當然。在這種情況下,不需要創建基類或接口,因爲一切都是動態的。
對於來自強類型語言背景的人來說,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中添加了抽象基類模塊。但我沒有用過它。
一種選擇是使用zope interfaces。但是,正如Wai Yip Tung所述,您不需要使用接口來獲得相同的結果。
zope.interface
軟件包實際上更像是一種用於發現如何與對象進行交互的工具(通常在具有多個開發人員的大型代碼庫中)。
感謝msw。我不知道一個用戶可以編輯另一個用戶的回覆:) – 2010-05-18 19:47:21
是的,但僅限於良好的力量。實際上,這是一時興起的,因爲我沒有寫下你寫得很好的答覆。 http://stackoverflow.com/faq(靠近底部) – msw 2010-05-18 20:59:09