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
那么为什么需要强制执行任何操作呢? –