setattr () не устанавливается - PullRequest
1 голос
/ 12 марта 2011

У меня есть класс (бот), у которого есть атрибут «здоровье»; Поскольку в этом классе много параметров, и я хотел, чтобы пользователь ввел их много, я выбрал циклическое прохождение диктанта {param: объяснение}, и для каждого параметра введите значение для установки.

<code>attr_array = ["health",...]</p>

<p>attr_dict = {}
attr_dict["health"] = "your bot's health"
...</p>

<p>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"
Итак, строка print attr, getattr ... возвращает (образец) «здоровье 50» Однако строка print str возвращает «0 hp»

Есть ли причина для этого?

1 Ответ

1 голос
/ 12 марта 2011

Из комментариев к вопросу: почему вы делаете

 setattr(tmp_bot, attr_dict[attr], tmp_attr)

, а не

 setattr(tmp_bot, attr, tmp_attr)

? Я думаю, реальный вопрос в том, почему вы ожидаетеэти две строки печати выводятся одинаково, когда одна обращается к свойству «здоровье вашего бота», а другая - к свойству «здоровье».

Еще один совет: вы должны определить элементы attr_arr как глобальные строки (например, как HEALTH= "здоровье").Таким образом, вы по-прежнему можете их печатать, и нажимать на них, и так далее, но если бы вы случайно где-нибудь набрали HEATH, python пожаловался бы на неопределенный глобал, а не загадочно провалился позже.

...