我有一个导入模块的脚本,该模块具有我想稍微更改的功能。假设该模块具有divide 和run_program 功能:
def _divide(var):
return 1/var
run_program(x):
do some stuff
_divide(x)
do more stuff
相反,我希望它这样做
def divide(var):
if var == 0:
var = 1e-131
return 1/var
run_program(x):
do some stuff
_divide(x)
do more stuff
我现在已经更改了模块中的功能。但是,如果我想在其他地方运行该程序,我也需要更改那里的模块。 因为我想要更改的函数是从模块内部调用的,所以我无法覆盖它(据我所知)。我可以从脚本中更改函数,这样我就不必更改已安装的模块吗?
<小时/>编辑:模块是 https://pypi.python.org/pypi/dirichlet/0.7功能是:
def _init_a(D):
'''Initial guess for Dirichlet alpha parameters given data D'''
E = D.mean(axis=0)
E2 = (D**2).mean(axis=0)
return ((E[0] - E2[0])/(E2[0]-E[0]**2)) * E
最佳答案
您可以在 Python 中动态替换函数:
import module
old_divide = module._divide
def new_divide(var):
if var == 0:
var = 1e-131
return old_divide(var)
module._divide = new_divide
当调用run_program
时,它将使用替换函数;对 _divide
的查找是在调用 run_program
时完成的,而不是在加载模块时完成的。
关于python - 如何处理已安装模块的方法的轻微更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19269968/