[英]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.