2016-04-21 14 views
1

今日追加されたPythonリストではかなり奇妙な問題が発生しました。私は各要素がC structのような配列を作成しようとしていました。これらの要素の1つは、単独でリストでした。私が期待Pythonリストの追加の問題

class players: 
    name='placeholder' 
    squad=list() 

teams=list() 
teams.append(players()) 
teams.append(players()) 
teams[0].name="abc" 
teams[1].name="xyz" 
teams[0].squad.append("Joe") 

for w in teams: 
    print(w.name) 
    print(w.squad) 

出力である:これは、問題のコードで私はチームのためsquadにメンバーを追加するので

abc 
['Joe'] 
xyz 
[] 

[0]。しかし、私が手出力は次のようになります。

abc 
['Joe'] 
xyz 
['Joe'] 

名前は細かい設定されているが、.appendteamsの両方の要素にそれを追加します!

この原因は何ですか?これを回避するにはどうすればよいですか。

答えて

11

あなたのクラス定義では、squadnameはインスタンス変数ではなく、クラス変数です。新しいplayerオブジェクトが初期化されると、基本的に同じプレーヤーのすべてのインスタンスで同じsquad変数を共有しています。代わりに、インスタンス固有の変数を明示的に区切るplayerクラスに対して__init__メソッドを定義する必要があります。

class players: 
    def __init__(self): 
     self.name = 'placeholder' 
     self.squad = [] 

はその後、あなたの新しいplayerオブジェクトを初期化するとき、それは自身のsquad変数を持っています。あなたのコードの残りの部分は、正しいオブジェクトのsquadが追加された状態でうまくいくはずです。

+0

ありがとうございます!これは問題を解決します! –

関連する問題