2024-06-08 20:15:17 发布
网友
如果我给模块打补丁:
# mokeypatch.py import other_module def replacement(*args, **kwargs): pass other_module.some_func = replacement
这会影响直接导入some_func的模块,还是取决于导入的顺序?如果第三个模块是这样的:
some_func
首先,运行这个代码,然后运行monkey补丁。third_module.some_func会是旧的吗?在
third_module.some_func
是的,它将指向旧函数。在
在mod2内执行from mod import func时,func将被绑定在mod2的范围内。 Monkeypatching mod.func会将mod.func绑定到新函数,但是mod和{}都不知道{}甚至存在,即使他们知道(内部他们可能在某个地方知道),他们也不知道是否应该替换它。在
mod2
from mod import func
func
mod.func
mod
重新绑定导入的名称会有问题的一个实际示例如下:
# monkeypatch.py import other_module from other_module import func as orig_func def replacement(): do_stuff() orig_func() do_stuff() other_module.func = replacement
如果它是反弹的,那么现在就有无限递归,并且无法调用原始函数。在
是的,它将指向旧函数。在
在}都不知道{}甚至存在,即使他们知道(内部他们可能在某个地方知道),他们也不知道是否应该替换它。在
mod2
内执行from mod import func
时,func
将被绑定在mod2
的范围内。Monkeypatching
mod.func
会将mod.func
绑定到新函数,但是mod
和{重新绑定导入的名称会有问题的一个实际示例如下:
如果它是反弹的,那么现在就有无限递归,并且无法调用原始函数。在
相关问题 更多 >
编程相关推荐