类实例化在python中给出了位置错误

类实例化在python中给出了位置错误,python,python-3.x,class,Python,Python 3.x,Class,我有一个类定义如下: class Trade: def __init__(self, **kwargs): # lots of things 我正在尝试通过以下操作实例化一个: trade_tmp = Trade(json.loads(trade_str)) 我的理解是,**kwargs参数将自动拾取生成的字典。我错了吗 我得到的是整个采用1个位置参数,但2个位置参数出现了错误,我认为不应该在这里应用。json返回的dict。loads充当函数的单个参数。因此,您需要另一个位置参

我有一个类定义如下:

class Trade:
  def __init__(self, **kwargs):
    # lots of things
我正在尝试通过以下操作实例化一个:

trade_tmp = Trade(json.loads(trade_str))
我的理解是,
**kwargs
参数将自动拾取生成的字典。我错了吗


我得到的是整个
采用1个位置参数,但2个位置参数出现了错误,我认为不应该在这里应用。

json返回的dict。loads
充当函数的单个参数。因此,您需要另一个位置参数:

def __init__(self, data, **kwargs)
虽然您可以在dict之前预加两个start,将其强制作为关键字参数,但它不是为此目的而设计的,我建议您不要这样做:

# it's valid, but don't do this
Trade(**json.loads(trade_str))

使用args或kwargs有两种选择:

import json

class Trade1:
  def __init__(self, **kwargs):
      print(kwargs)

class Trade2:
  def __init__(self, *args):
      print(args)

trade_str = '{"a": 1, "b": 2}'
trade_tmp1 = Trade1(**json.loads(trade_str))
trade_tmp2 = Trade2(json.loads(trade_str))

实际上,这里需要*args,而不是**kwargs。顺便说一句,“args”和“kwargs”是任意的-是星号起作用。而*args也可以是字典?我以为是dict=***,不是dict=*啊!我懂了。。因此,您实际上想要做的是
Trade(**json.loads(Trade_str))
,这样它就可以解压您的KWARG。对吗?不,我最终还是听从了你的第一个建议,我认为这是正确的建议,即将dict作为一个简单的参数传递,而不是传递命名的参数。如果你想发布一个答案,我会验证它,因为你是第一个处理这个案件的人