Python 修补本地实例
假设我在python模块Python 修补本地实例,python,monkeypatching,Python,Monkeypatching,假设我在python模块a.py中有以下代码: def func(): obj = Obj() # Some code that uses obj 有没有一种方法可以在不将其作为函数参数的情况下对obj进行monkey patch 原因:在代码本身的上下文中,它不应该是一个参数,但是在使用代码进行测试和系统模拟的上下文中,补丁是合理的。此外,在各种情况下,我可能需要修补不同的局部对象,并将它们全部作为参数放置,这将是一件乏味的事情。您可能过于复杂了,请查看控制反转原理。我仍然对
a.py
中有以下代码:
def func():
obj = Obj()
# Some code that uses obj
有没有一种方法可以在不将其作为函数参数的情况下对obj进行monkey patch
原因:在代码本身的上下文中,它不应该是一个参数,但是在使用代码进行测试和系统模拟的上下文中,补丁是合理的。此外,在各种情况下,我可能需要修补不同的局部对象,并将它们全部作为参数放置,这将是一件乏味的事情。您可能过于复杂了,请查看控制反转原理。我仍然对如何在Python中实现这一点感兴趣。可能:)虽然应用程序一开始很复杂,所以我有一些借口。。。我仍然想知道这个monkeypatching是如何完成的,它可以为我节省大量的工作,所以他说的是:用你的函数导入模块并对类进行MonkeyPatch,而不是变量。哦。。。但是如果我只在某个函数中需要这个补丁,而不是在整个a.py
中需要它呢?@Jonathan:在调用a.func()
之后,你可以将a.Obj
恢复到以前的值
在a
中内部使用,然后可以导入a
然后设置a.func=local\u func
并让local\u func
执行:1)覆盖a.Obj
2)调用原始a.func
3)恢复a.Obj
# if func() is defined in `a.py`
import a
oldObj, a.Obj = a.Obj, MockObj
a.func()
a.Obj = oldObj