具有** kwargs输出的类:arg未定义

时间:2019-06-23 20:15:15

标签: python class

我有一个带有多个参数的类,并且它们具有默认值。在程序中,有时在类中使用的值会随着用户输入的变化而改变。

我已经考虑过以下方法。该类接受一个名为group_size的整数(默认情况下为w / 8),一个名为bounds的布尔值(默认值:True)。有时,用户想要更改bounds并将max_rank设置为用户提供的其他整数值。

我的班级定义如下:

class Society:

    def __init__(self, group_size=8, bounds=True, **kwargs):
        self.group_size = group_size

        if bounds == True:
            self.max_rank = group_size
        else:
            self.max_rank = max_rank

但是当我调用它更改max_rank的值时,就像这样:

S = Society(bounds=False, **{'max_rank': 10})

或类似这样:

S = Society(bounds=False, max_rank=10)

我收到相同的错误NameError: name 'max_rank' is not defined。对于第一个错误,它指向相同的代码行,而对于另一个错误,它指向我将max_rank分配给self.max_rank的类内部。

第一个错误:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-124-d093fc631922> in <module>
----> 1 S = Society(bounds=False, **{max_rank: 10})

NameError: name 'max_rank' is not defined

第二个错误:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-125-92d52166f851> in <module>
----> 1 S = Society(bounds=False, max_rank=10)

<ipython-input-123-ec1465ee15f1> in __init__(self, groups, group_size, b, c, fights_noise, up_rank, bounds, *args, **kwargs)
     49             self.max_rank = group_size
     50         else:
---> 51             self.max_rank = max_rank
     52 
     53 

NameError: name 'max_rank' is not defined

我是否必须(或者我可以)定义接受小矮人的方式?像名称一样? 也许当我实例化课程时,我以一种不好的方式传递了kwargs。

2 个答案:

答案 0 :(得分:2)

您要从max_rank词典中提取kwargs

if bounds == True:
    self.max_rank = group_size
else:
    #Extract max_rank out of kwargs
    max_rank = kwargs.get('max_rank')
    self.max_rank = max_rank

答案 1 :(得分:0)

仅与其他参数一样,将max_rank作为参数传递,然后从kwargs方法中提取出来。

代码如下:

class Society:

    def __init__(self, group_size=8, bounds=True, **kwargs):
        self.group_size = group_size

        if bounds == True:
            self.max_rank = group_size
        else:
            max_rank = kwargs.get('max_rank')
            self.max_rank = max_rank

S = Society(bounds=False, max_rank=10)

print(S.max_rank)

输出

  

10