【问题标题】:setattr() not settingsetattr() 未设置
【发布时间】:2011-03-12 07:32:36
【问题描述】:

我有一个类(机器人),它有一个属性“健康”;因为这个类有很多参数,我希望用户输入很多,我选择循环访问 {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... 行返回(示例)“health 50” 但是,打印 str 行返回“0 hp”

发生这种情况有什么原因吗?

【问题讨论】:

  • 你为什么要做setattr(tmp_bot, attr_dict[attr], tmp_attr)而不是setattr(tmp_bot, attr, tmp_attr)?我想真正的问题是,当一个访问属性 "your bot's health" 而另一个访问属性 "health" 时,为什么您希望这两行 print 输出相同?
  • 没有充分的理由,因为那是错误的。谢谢。
  • 欢迎。另一个提示:您应该将attr_arr 元素定义为全局字符串(例如,HEALTH = "health")。这样,你仍然可以打印它们,然后键入它们等等,但是如果你不小心在某个地方输入了HEATH,python 会抱怨一个未定义的全局而不是稍后神秘地失败。
  • @phoo:你应该这样回答,因为它是!
  • @katrielalex:我想我可以——完成:)

标签: python setattr


【解决方案1】:

来自问题cmets:你为什么这样做

 setattr(tmp_bot, attr_dict[attr], tmp_attr)

而不是

 setattr(tmp_bot, attr, tmp_attr)

我想真正的问题是,当一个访问属性“您的机器人的健康”而另一个访问属性“健康”时,为什么您希望这两条打印行输出相同。

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

【讨论】:

    猜你喜欢
    • 2012-05-16
    • 2021-01-04
    • 2014-02-18
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    相关资源
    最近更新 更多