我有一个带有多个参数的类,并且它们具有默认值。在程序中,有时在类中使用的值会随着用户输入的变化而改变。
我已经考虑过以下方法。该类接受一个名为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。
答案 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