python - 具有 **kwargs 输出的类:未定义 arg
问题描述
我有一个有几个参数的类,它们有默认值。在程序中,有时类中使用的值会随着用户的输入而改变。
我已经考虑过以下方式。该类接受一个名为group_size
(默认为 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 的方式?喜欢他们会取的名字吗?也许当我实例化课程时,我以一种糟糕的方式通过了 kwargs。
解决方案
你想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
推荐阅读
- javascript - 对象加值后为空 Axios
- express - req.user undefined (Vuex + Express + Passport Local Mongoose)
- javascript - 当画布大小不同时,HTML5 Canvas 实时协作白板画线无法正确绘制
- android - issueCommand REBOOT 不起作用。我该如何解决这个问题?
- python - 如何找到数据框中两列之间的差异,列中的任一行在 Python 中具有 -ve 和/或 +ve 值
- javascript - 检查数组中的值是否有共同点
- python-3.x - Matplotlib 动画错误“请求的 MovieWriter (ffmpeg) 不可用”
- entity-framework - 插入后如何在 EntityFramework 中获取多级相关表?
- python - 使用 Pandas 从具有多个分隔符的单个文本文件中导入多个部分
- ios - 图像视图无法与集合视图中的约束正确对齐