如何扩展/修补现有模块或包?

时间:2010-03-31 10:11:01

标签: python locale extend

我想扩展名为OpenERP的python应用程序的一些特定于语言环境的功能。我只需要实现第三方module.function,每次OpenERP调用locale.setlocale()函数时都会调用该函数,而不更改OpenERP和locale模块源代码。

我能想象的唯一方法是在主应用程序包dir中提供一个名为locale.py的模块,但似乎这是一个unpythonic解决方法。

1 个答案:

答案 0 :(得分:2)

查找Monkey Patching。这不是最优雅的技术,但有时它是唯一的选择。

在您的情况下,您可以将自己的函数替换为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)