setattr()没有设置

时间:2011-03-12 07:32:37

标签: python setattr

我有一个类(bot),它有一个属性“health”;因为这个类有很多参数,我希望用户输入很多参数,我选择循环遍历{param:explanation}的字典,并为每个参数输入一个值来设置。

attr_array = ["health",...]

attr_dict = {} attr_dict["health"] = "your bot's health" ...

for attr in attr_array: tmp_attr = input(attr + attr_dict[attr] + ": ") setattr(tmp_bot, attr_dict[attr], tmp_attr) print attr, getattr(tmp_bot, attr_dict[attr]) print str(tmp_bot.health) + " hp"

所以,打印attr,getattr ...行返回(样本)“健康50” 但是,print str行返回“0 hp”

有没有理由这样做?

1 个答案:

答案 0 :(得分:1)

从问题评论:你为什么要这样做

 setattr(tmp_bot, attr_dict[attr], tmp_attr)

而不是

 setattr(tmp_bot, attr, tmp_attr)

我想真正的问题是,为什么当一个人访问属性“你的机器人的健康状况”而另一个访问属性“健康”时,这两个打印行输出相同。 / p>

另一个原型:你应该将attr_arr元素定义为全局字符串(例如,像HEALTH =“health”)。这样,你仍然可以打印它们,然后键入它们,等等,但是如果你不小心在某处输入了HEATH,那么python就会抱怨未定义的全局,而不是以后神秘地失败。