python - 如何处理已安装模块的方法的轻微更改?

标签 python

我有一个导入模块的脚本,该模块具有我想稍微更改的功能。假设该模块具有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/

相关文章:

Python Boto 创建的 cloud-init #include 脚本未在 EC2 上运行

python - Pandas :如何将具有多个值的单元格转换为多行?

python - 如何更改matplotlib中的默认 latex 字体

python - 有没有办法将类实例定义为 None ?

python - 根据值的计数在数据框中删除列

python - 不能模拟被模拟对象的方法? pytest 中的 call_count 为 0

python - 如何将复杂的字典导入 Pandas ?

python - Azure 函数与 Python |如何输出到多个事件中心

python - 列表中的最高整数

python - “numpy”没有属性 'core'