Skip to main content
 首页 » 编程设计

Python 将一个函数赋值给另一个函数

2025年05月04日16lexus

我正在尝试将一个函数分配给另一个函数,分配的左侧可用作字符串。例如,我正在寻找的方法的主体是

def change_function_defintion(name_of_function = 'module1.function1' 
       , function_object): 
    # Can I do eval(name_of_function) = function_object ? will that work? 
    pass 

问题:

  1. 我如何实现这一点?显然,如果我调用上述方法,然后调用 module.function1,我希望新函数被选取。
  2. 我在单元测试的上下文中这样做,即模拟几个函数,运行测试,然后基本上“取消模拟”它们。上述方法有什么问题吗?

请您参考如下方法:

我认为使用类似 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