我正在尝试将一个函数分配给另一个函数,分配的左侧可用作字符串。例如,我正在寻找的方法的主体是
def change_function_defintion(name_of_function = 'module1.function1'
, function_object):
# Can I do eval(name_of_function) = function_object ? will that work?
pass
问题:
- 我如何实现这一点?显然,如果我调用上述方法,然后调用 module.function1,我希望新函数被选取。
- 我在单元测试的上下文中这样做,即模拟几个函数,运行测试,然后基本上“取消模拟”它们。上述方法有什么问题吗?
请您参考如下方法:
我认为使用类似 Mock 的模拟库会更好.使用 patch,您可以在上下文管理器或函数的范围内更改函数的行为,然后让它恢复正常。例如:
from mock import patch
with patch('module1.function1') as function1:
function1.side_effect = function_object
# Do stuff
如果 function1 在 with block 中调用,它将被替换为 function_object。
类似地,在函数内打补丁:
@patch('module1.function1')
def my_test(function1):
function1.side_effect = function_object
# Do stuff
