我陷入了困境。
下面是相同的插图。
我通过参数解析传递值。 a,b,c的值。
代码是 -
initial_foo(args):
**codes**
args.a, args.b are used here.
如果我打印args
,则返回self.args = argsparse.Namespace(a='hii',b='bye',c='yolo')
。现在,如果我在args
中传递initial_foo(self.args)
,它会自动获取通过args
提供的值。
现在,我想测试这个initial_foo(args)
方法。所以,我可能做的就是设置相同的self.args = argsparse.Namespace(a='hii',b='bye',c='yolo')
并传入initial_foo
方法。如果我不想使用它,该怎么办?
还有其他相同的解决方案吗?
我们可以通过``** locals()做什么?
如果您有任何疑问,请告诉我。
答案 0 :(得分:1)
如果您正在考虑如何在不创建argparse.Namespace对象的情况下对initial_foo
进行单元测试,那么您可以传递initial_foo
任何具有属性'a', 'b', 'c'
并允许dot
的对象记谱法。
locals()
不起作用,因为它会为您提供dict
。字典元素通过索引(__getitem__
)访问,而不是点运算符(__getattr__
)
您可以使用这些道具创建一个类,并传入该类的对象。
class Data(object):
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
initial_foo(Data(1,2,3))
或者传入一个命名元组
from collections import namedtuple
data = namedtuple('data', ['a', 'b', 'c'])
initial_foo(data(1,2,3))
任何类似的东西也应该起作用。