我尝试在方法参数中使用**kwargs
,这是我的代码:
class TextFormatter:
def format(self, text, **key_vals):
injected_text = text
return injected_text;
formatter = TextFormatter()
print(formatter.format("test", { "p1" : "t1", "p2" : "t2"}))
不幸的是,我收到了这个错误:
print(formatter.format("test", { "p1" : "t1", "p2" : "t2"}))
TypeError: format() takes 2 positional arguments but 3 were given
你知道我的代码有什么问题吗?
答案 0 :(得分:3)
您的TextFormatter.format
方法有三个参数:
self
,这是一个隐式传递的位置参数。text
,这是另一个位置论证。**key_vals
,收集任何额外的关键字参数。这意味着您的方法只接受2个位置参数。但是你给它3(self
,"test"
和字典{ "p1" : "t1", "p2" : "t2"}
)。这样做会引发TypeError
。
要解决此问题,您需要在使用**
传递字典时解压缩字典:
print(formatter.format("test", **{ "p1" : "t1", "p2" : "t2"}))
或者,您可以直接传递关键字参数:
print(formatter.format("test", p1="t1", p2="t2"))