我的类定义如下:
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
错误,虽然我不应该将其应用于此处。
答案 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))