gpt4 book ai didi

python - 如何在 Python 中模拟函数以更改默认关键字参数

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

我正在使用模拟库和 unittest2 来测试我的软件项目的不同方面。

目前我有以下问题:是否可以模拟一个函数,以便默认关键字参数不同,但功能仍然存在?

假设我有以下代码

class C():
def fun(self, bool_arg = True):
if bool_arg:
return True
else
return False

如果我想模拟 C.fun 怎么办:

C.fun = mock.Mock(???)

以便 C 的每个实例都将关键字“bool_arg”替换为 False,而不是 True 和结果:

c = C()
c.fun()

返回:

False

最佳答案

您也可以尝试包装您的函数。线上的东西

def wrapper(func, bool_arg):
def inner(*args, **kwargs):
kwargs['bool_arg']=bool_arg
return func(*args, **kwargs)
return inner

class C():
def fun(...):
...

c = C()
c.fun = wrapper(fun, False)

应该可以

编辑

如果您想更改类的默认值而不是特定实例的默认值,您可以创建派生类并重新定义 fun 包装 C 的方法。在线的东西(我现在没有时间测试它):

class D(C):
def fun(self, *args, **kwargs):
f = wrapper(C.f, False)
return f(*args, **kwargs)

然后关于@Ber 的建议,你可以定义 def wrapper(func, **wrapkwargs) 然后代替 kwargs['bool_arg']=bool_arg

for i in wrapkwargs.iteritems():  #wrapkwargs is a dictionary
kwargs[i[0]] = i[1]

关于python - 如何在 Python 中模拟函数以更改默认关键字参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14605498/

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