如何扩展/修改现有模块或包?
我想为一个叫做OpenERP的Python应用程序增加一些特定地区的功能。我需要做的就是实现一个第三方模块的函数,这个函数会在OpenERP每次调用locale.setlocale()这个函数时被调用,而不需要修改OpenERP或locale模块的源代码。
我能想到的唯一方法是在主应用程序的包目录里提供一个叫locale.py的模块,但这似乎不是一种很好的Python编程方式。
1 个回答
2
可以查一下猴子补丁。这不是最优雅的技术,但有时候它是唯一的选择。
在你的情况下,你可以用自己的函数替代locale.setlocale()
,这样就可以实现你想要的功能。它的样子大概是这样的:
import locale
original_setlocale = locale.setlocale
def my_setlocale(category, locale=None):
# Do anything you want
# optionally call original function
original_setlocale(category, locale)