用于实现模块接口的pythonic方法

时间:2017-07-04 08:47:33

标签: python interface module

我有一组函数可以定义我想要的行为(接口)。

这个小组可以包在课堂上,所以我可以强制执行#34;我想要的行为(提出未实现的错误)。

但另一方面,它不是非常pythonic,而且类只是一个带有一堆静态方法的类。

因此,如果我使用具有函数的模块,我就无法强制执行所有所需的函数。

任何想法如何强制一个模块来实现我想要的所有功能,而不将它包装在一个类中?

提前致谢!

1 个答案:

答案 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

这里唯一真正实现的是,无效的实现会在您注册时抛出异常,而不是在您使用它时抛出异常。这种事情是否值得努力是值得怀疑的。使用它时,实现无法正常工作的方式有很多种,注册只能捕获最明显的实现(缺少函数名称)。