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

1 投票
1 回答
705 浏览
提问于 2025-04-15 21:04

我想为一个叫做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)

撰写回答