1

私は属性「健康」を持つクラス(ボット)を持っています。このクラスには多くのパラメーターがあり、ユーザーに多くのパラメーターを入力してもらいたいので、{param:explanation} の dict をループして、パラメーターごとに設定する値を入力することにしました。

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"

したがって、print attr, getattr... 行は (サンプル) "health 50" を返しますが、print str 行は "0 hp" を返します。

これが起こる理由はありますか?

4

1 に答える 1

1

質問のコメントから:なぜあなたはやっているのですか

 setattr(tmp_bot, attr_dict[attr], tmp_attr)

そしてそうではない

 setattr(tmp_bot, attr, tmp_attr)

? 本当の問題は、一方がプロパティ「ボットの健康」にアクセスし、もう一方がプロパティ「健康」にアクセスしているときに、これらの 2 つの印刷行が同じ出力を期待するのはなぜだと思いますか。

もう 1 つのヒント: attr_arr 要素をグローバル文字列として定義する必要があります (例: HEALTH = "health" など)。そうすれば、それらを印刷したり、キーを押したりすることができますが、どこかで誤って HEATH と入力した場合、python は後で不思議なことに失敗するのではなく、未定義のグローバルについて文句を言うでしょう。

于 2011-03-12T17:37:17.587 に答える