首页 > 解决方案 > 我可以通过迭代为类变量赋值吗?

问题描述

我正在尝试使用值列表来更改我添加到另一个(临时)列表中的一堆类值。

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 为假

有任何想法吗?

标签: pythonpython-3.x

解决方案


当你这样做时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)

推荐阅读