繁体   English   中英

从Python中的导入模块替换主模块中的函数

[英]Replace function in main module from imported module in Python

是否可以从python中的导入模块(使用字符串)在主模块中设置全局变量?

(是的,我知道这不是最佳做法。)

最终,我希望它看起来像这样:

main.py

import mod
def func():
  print('failure')
mod.run(func)
func()

mod.py

def func2():
    print('success')
def run(f):
    globals()[f.__name__] = func2

结果是'failure'因为全局相对于模块。

我想从模块中用func2覆盖变量func

另一个警告:变量func发生了变化,因此我需要将其称为f.__name__ string

我知道,如果在通过mod.run(func)更改func的名称之前更改了此方法,则此方法将行不通。

我的问题:是否可以从导入的模块更改主模块中的功能,而无需更改上述示例main.py的代码? 如果是这样,怎么办?

您可以更改功能func实际执行的绑定代码,而不是更改func名称绑定的名称。

def func2():
    print('success')
def run(f):
    f.__code__ = func2.__code__

这会修改func引用的实际功能对象,并且仅部分使用上面的代码,因此可能需要进一步的手术(例如,将func.__name__更新为func2而不是func ),并且您可能想要制作func的真实副本。在猴子像这样修补之前。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM