我无法用另一个函数从另一个模块中替换一个函数,这让我发疯。一只猴子在python中如何修补一个函数?
比方说,我有一个模块bar.py,看起来像这样:
from a_package.baz import do_something_expensive
def a_function():
print do_something_expensive()
而且我还有一个模块,看起来像这样:
from bar import a_function
a_function()
from a_package.baz import do_something_expensive
do_something_expensive = lambda: 'Something really cheap.'
a_function()
import a_package.baz
a_package.baz.do_something_expensive = lambda: 'Something really cheap.'
a_function()
我希望得到的结果:
Something expensive!
Something really cheap.
Something really cheap.
而是我得到这个:
Something expensive!
Something expensive!
Something expensive!
我在做什么错?
第二个不能工作,因为你只是重新定义do_something_expensive的意义在你的本地范围内。但我不知道,为什么第三个不工作...... – pajton 2010-03-03 22:18:22
正如尼古拉斯解释的那样,您正在复制一个参考文献并只替换其中的一个参考文献。 '从模块导入non_module_member'和模块级别的猴子打补丁是不兼容的,因为这个原因,通常都是最好的避免。 – bobince 2010-03-03 22:29:35
首选的软件包命名方案是小写的,没有下划线,即'apackage'。 – 2010-03-03 22:39:00