我已将问题简化为最简单的代码:
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
答案 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建议,添加**
以解压缩字典。