在__init __

时间:2015-04-23 23:28:18

标签: python

我已将问题简化为最简单的代码:

class Billy:
    def __init__(self, **kwargs):
        pass

Billy({'a': 1,  'b': 2})

这是在python 3.4.3和2.7.6中,我在其他脚本中运行得很好的代码看起来与此相同。我拉着我的头发试图理解这里的错误。它不断给我一个TyperError抱怨我使用了错误的参数:

TypeError: __init__() takes 1 positional argument but 2 were given

2 个答案:

答案 0 :(得分:1)

尝试添加**

>>> Billy(**{'a': 1,  'b': 2})
<__main__.Billy object at 0x00000000023E29B0>

答案 1 :(得分:0)

这里的混淆是{'a': 1, 'b': 2}是一个单独的实体,它作为第一个参数提供给构造函数,因此它是一个位置参数。您需要添加*args

class Billy:
    def __init__(self, *args, **kwargs):
        pass

或将其作为Billy(a=1, b=2)提供或执行TigerhawkT3建议,添加**以解压缩字典。