如何参数化通用Python模块?

时间:2012-09-13 13:06:40

标签: python generics module abstract

我可以创建一个使用模块导入器提供的功能的模块吗?

我想编写通用代码而不指定几个关键函数的实现。我希望用户指定这些。我可以将这些作为所有功能的输入,但这看起来很难看。

如果我正在写一个对象,我会创建一个抽象类。模块是否有等价物?

编辑:我特别询问如何使用模块中的函数,而不是类中的方法。

2 个答案:

答案 0 :(得分:1)

可以修补模块并在运行时向模块添加新功能。

import my_module
def my_implementation():
    pass

my_module.implementation = my_implementation

然而,这在Python社区中是不受欢迎的。它本身就不稳定,因为这会影响该模块的所有用户。例如,如果您使用的另一个模块也使用了已修补猴子的模块,则您的其他模块可能会显示难以调试的不稳定行为。

对于你想做的事情,你最好创建一个抽象类: - )

答案 1 :(得分:1)

如果你在一个模块中这样做,如果有一天在同一个程序中,一个模块想要将通用模块与实现一起使用,而另一个模块想要将它与另一个模块一起使用,则会出现问题。

解决方案是编写一个主要包含提供所需服务的类的模块。

例如,查看“随机”模块。所有模块函数如“randint”,“uniform”,“gauss”实际上都绑定到random.Random类的隐藏实例的方法。但是你也可以使用你自己的Random类实例,或者通过重新定义一些关键方法来改变生成随机的方式,但保留所有有用的方法。

请参阅http://docs.python.org/library/random.html