gpt4 book ai didi

python - 实现装饰器,它将用另一个实现替换一个类

转载 作者:太空宇宙 更新时间:2023-11-03 18:13:12 24 4
gpt4 key购买 nike

我需要的是这样的东西:

def method():
my_var = module.Class1() #actually calling Class1 constructor
...

我需要实现装饰器,一旦类定义与另一个类定义发生变化,就像这样:

@substitute(module.class1 = new_module.class2)
def method():
my_var = module.Class1() #actually calling new_module.class2 constructor
...

您能给我一些如何做到这一点的提示吗?

最佳答案

您尝试做的事情称为模拟。使用mock library去做这个;该库是 Python 3.4 及以上版本的一部分 unittest.mock

使用mock,您可以在仅测试时修补原始函数:

try:
from unittest.mock import patch
except ImportError:
# Python < 3.4
from mock import patch

with patch('module.class1') as class1_mock:
mocked_instance = class1_mock.return_value
mocked_instance.method_to_be_called.return_value = 'Test return value'

method()

mocked_instance.method_to_be_called.assert_called_with('Foo', 'bar')

上面在 with block 的持续时间内模拟了 class1,然后撤消补丁。该补丁将 module.class1 替换为 Mock 对象,您也可以作为 class1_mock 访问该对象。上面的示例设置 method_to_be_known 返回一个被操纵的测试返回值,并在测试后验证调用签名。

关于python - 实现装饰器,它将用另一个实现替换一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25501867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com