python - 我可以通过迭代为类变量赋值吗?
问题描述
我正在尝试使用值列表来更改我添加到另一个(临时)列表中的一堆类值。
class game_events():
def __init__(self):
self.stage = 0
self.rules = False
saved_vars = [12, True]
game = game_events()
i = 0
for x in [game.stage, game.rules]:
x = saved_vars[i]
i+=1
似乎一切正常,但只有临时列表被更改,就像诱饵一样。
期望的结果:
game.stage == 12
game.rules 为真
实际结果:
game.stage == 0
game.rules 为假
有任何想法吗?
解决方案
当你这样做时x = saved_vars[i]
,你是在重新绑定变量x
,而不是修改game
它之前的值来自的对象。如果您只想修改 上的一些属性game
,直接这样做会容易得多:
game.stage, game.rules = saved_vars[0:2]
如果您有很多属性要处理,而不仅仅是本例中的两个,您可能会回到循环的想法,但您需要以不同的方式进行操作。您需要使用setattr
. 这意味着您需要将属性的名称指定为字符串,而不是使用点分符号:
for attr, value in zip(['stage', 'rules'], saved_vars):
setattr(game, attr, value)
推荐阅读
- selenium-webdriver - 我无法使用 java 在 selenium 中找到带有标签的 linkText
- sql - 如何在sql中对一对多关系表进行分页?
- python - Discord.py 没有这样的文件或目录,即使它确实存在
- python - 如何使用 numpy.loadtxt 读取文本文件的一部分并转换为数组
- python - 提取一列中的数字并添加到另一列,如果多个数字用模式添加它们(熊猫)
- html - 兄弟聚焦时如何更改元素的颜色?
- python - Python 脚本,无法创建或打开文本文件
- r - 如何让 R 处理编码文件?
- escaping - Rmarkdown 和转义字符
- opengl - OpenGL中的镜面光不稳定