带方法的Kwargs会引发TypeError

时间:2015-01-17 17:53:04

标签: python function arguments kwargs

我尝试在方法参数中使用**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

你知道我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:3)

您的TextFormatter.format方法有三个参数:

  1. self,这是一个隐式传递的位置参数。
  2. text,这是另一个位置论证。
  3. **key_vals,收集任何额外的关键字参数。
  4. 这意味着您的方法只接受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"))