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

时间:2019-03-07 01:42:30

标签: python python-3.x class

我的类定义如下:

class Trade:
  def __init__(self, **kwargs):
    # lots of things

我正在尝试通过实例化一个:

trade_tmp = Trade(json.loads(trade_str))

我的理解是**kwargs参数将自动提取生成的字典。我不正确吗?

我遇到了整个takes 1 positional argument but 2 were given错误,虽然我不应该将其应用于此处。

2 个答案:

答案 0 :(得分:1)

json.loads返回的字典用作该函数的单个参数。因此,您需要另一个位置参数:

def __init__(self, data, **kwargs)

虽然您可以在dict之前强制两个开始以强制将其作为关键字参数,但它不是为此目的而设计的,我建议您反对:

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

答案 1 :(得分:0)

使用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))