类实例化在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作为一个简单的参数传递,而不是传递命名的参数。如果你想发布一个答案,我会验证它,因为你是第一个处理这个案件的人