0
我有一組函數定義了我所需的行爲(接口)。實現模塊接口的pythonic方式
這個組可以被包裝在一個類中,所以我可以「執行」我想要的行爲(引發未實現的錯誤)。
但是另一方面,它不是pythonic,而且該類只是一個靜態方法集合。
所以如果我使用功能模塊,我不能強制模塊實現所有需要的功能。
任何想法如何執行一個模塊來實現我想要的所有功能,而不包含它在一個類?
在此先感謝!
我有一組函數定義了我所需的行爲(接口)。實現模塊接口的pythonic方式
這個組可以被包裝在一個類中,所以我可以「執行」我想要的行爲(引發未實現的錯誤)。
但是另一方面,它不是pythonic,而且該類只是一個靜態方法集合。
所以如果我使用功能模塊,我不能強制模塊實現所有需要的功能。
任何想法如何執行一個模塊來實現我想要的所有功能,而不包含它在一個類?
在此先感謝!
一種解決方案是爲您的工廠提供一種「註冊」實現方法和另一種「獲取」特定實現方法。有效的實現將是具有所需方法名稱的對象。
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
這裏唯一真正完成的事情是無效的實現會在註冊時拋出異常,而不是在使用它時拋出異常。這種事情是否值得努力值得懷疑。當你使用它時,一個實現可能無法正常工作,並且註冊只能捕獲其中最明顯的一個(缺少函數名),這有很多種方法。
爲什麼你需要強制執行任何操作?你是否要求其他人實施API? –
想要將它用作工廠的一部分,所以應用程序的其他部分可以動態獲取對象,併爲不同的實現使用相同的函數名稱。 – NI6
那麼爲什麼需要強制執行任何操作呢? –