我有一组函数可以定义我想要的行为(接口)。
这个小组可以包在课堂上,所以我可以强制执行#34;我想要的行为(提出未实现的错误)。
但另一方面,它不是非常pythonic,而且类只是一个带有一堆静态方法的类。
因此,如果我使用具有函数的模块,我就无法强制执行所有所需的函数。
任何想法如何强制一个模块来实现我想要的所有功能,而不将它包装在一个类中?
提前致谢!
答案 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
这里唯一真正实现的是,无效的实现会在您注册时抛出异常,而不是在您使用它时抛出异常。这种事情是否值得努力是值得怀疑的。使用它时,实现无法正常工作的方式有很多种,注册只能捕获最明显的实现(缺少函数名称)。