2017-07-04 95 views
0

我有一組函數定義了我所需的行爲(接口)。實現模塊接口的pythonic方式

這個組可以被包裝在一個類中,所以我可以「執行」我想要的行爲(引發未實現的錯誤)。

但是另一方面,它不是pythonic,而且該類只是一個靜態方法集合。

所以如果我使用功能模塊,我不能強制模塊實現所有需要的功能。

任何想法如何執行一個模塊來實現我想要的所有功能,而不包含它在一個類?

在此先感謝!

+0

爲什麼你需要強制執行任何操作?你是否要求其他人實施API? –

+0

想要將它用作工廠的一部分,所以應用程序的其他部分可以動態獲取對象,併爲不同的實現使用相同的函數名稱。 – NI6

+0

那麼爲什麼需要強制執行任何操作呢? –

回答

0

一種解決方案是爲您的工廠提供一種「註冊」實現方法和另一種「獲取」特定實現方法。有效的實現將是具有所需方法名稱的對象。

class MyFactory: 
    def register(self, name, implementation): 
     # check implementation somehow and raise an Exception if it's not valid 
     # insure implementation has all required function names and they are callable 

    def get_implementation(self, name): 
     # returns a previously registered implementation 

這裏唯一真正完成的事情是無效的實現會在註冊時拋出異常,而不是在使用它時拋出異常。這種事情是否值得努力值得懷疑。當你使用它時,一個實現可能無法正常工作,並且註冊只能捕獲其中最明顯的一個(缺少函數名),這有很多種方法。