この:
for player in players:
player = Character()
がplayers
の各項目のための新しいCharacter
インスタンスを作成します(ない代わりに、別のクラスのインスタンスを作成しますその項目自体を使用して)変数にplayer
を代入します(前回の代入をovverriddingするたびに)。もちろんこれはあなたのplayers
リストに何も変更されません。ループが終了すると、Character()
インスタンスがplayer
という変数に束縛されてしまいます。ループを単一のものに置き換えるのと同じ実用的な結果が得られるでしょう:
player = Character()
しかし、明らかに使用されるものではありません。あなたはred
という名前の変数を定義した
プリント(red.life)
?
または私は プリント( "赤" .life)
"red"
が文字列であるとしよう。文字列には属性がありませんlife
。
何らかの理由で クラスのオブジェクトとしてplayerを使用していますが、リストの要素を使用したいと思います!
"リストの要素"(私はあなたがplayers
リストを意味すると仮定します)も文字列です。あなたの代わりにCharacter
インスタンスのリストを取得したい場合、あなたはどのようなことにそれを得ることができます。
class Character(object):
def __init__(self, name):
self.name = name
self.life = 50
playernames = ["red", "green", "blue", "42"]
players = [Character(name) for name in playernames]
が、それはまだ、など、文字インスタンスのリストだけをred
という名前の変数を作成しません。
特定の文字インスタンスを取得できるようにするには、明示的に変数を作成するか、または辞書を使用する必要があります。作成変数:
red = Character("red")
yellow = Character("yellow")
# etc
が、これは、すべての文字がハードコードされていること - あなたは、多かれ少なかれプレーヤーを持っていたり、これらを別の名前を付けることができないなど
の辞書を使用する:
playernames = ["red", "green", "blue", "42"]
players = {name:Character(name) for name in playernames}
print(players["red"].life)
print(players["green"].life)
# etc
'print(" red ".life)'とは何でしょうか? –
[変数名として文字列変数を使用する]の可能な複製(https://stackoverflow.com/questions/11553721/using-a-string-variable-as-a-variable-name) –
各要素を渡す必要があります'__init__'への引数としてリストの'文字列 '' red ''は' 'Character'のインスタンスではありません。プレイヤー= [赤色、緑色、青色、黄色]の色の文字(色)。 – chepner