2017-07-04 55 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 

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