Python 将一个函数分配给另一个函数

Kan*_*ath 3 python python-2.7

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

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

问题:

  1. 我该如何实现这一目标?显然,如果我调用上述方法,然后调用 module.function1,我希望能够选择新函数。
  2. 我是在单元测试的背景下执行此操作,即模拟几个函数,运行测试,然后基本上“取消模拟”它们。上述做法有问题吗?

Mat*_*ohn 5

我认为使用像Mock这样的模拟库会更好。使用patch您可以在上下文管理器或函数的范围内更改函数的行为,然后将其恢复正常。例如:

from mock import patch

with patch('module1.function1') as function1:
    function1.side_effect = function_object
    # Do stuff
Run Code Online (Sandbox Code Playgroud)

if在块function1内调用,with它将被替换为function_object

类似地,在函数内打补丁:

@patch('module1.function1')
def my_test(function1):
    function1.side_effect = function_object
    # Do stuff
Run Code Online (Sandbox Code Playgroud)