2016-05-15 4 views
1

私は3つのGameオブジェクトを作成しています。ただし、2番目と3番目のオブジェクトは新しいblocksリストを初期化していません。デバッグ中は、最初のGameオブジェクトのリストを使用してブロックを追加するだけです。これの理由は何ですか?そして、同じblocksリストを使用していないオブジェクトをどのように持つことができますか?Python:新しいオブジェクトは以前のオブジェクトの属性を使用しています

class Game(object): 

    blocks = [] 

    def __init__(self): 
     cords = [ 
      [0, 0], [0, 1], [0, 2], [0, 3], 
      [1, 0], [1, 1], [1, 2], [1, 3], 
      [2, 0], [2, 1], [2, 2], [2, 3], 
      [3, 0], [3, 1], [3, 2], [3, 3] 
     ] 

     random.shuffle(cords) 

     for i in range(0, 16): 
      self.blocks.append(Block(i + 1, cords[i][0], cords[i][1])) 
+1

オブジェクトをクラスにバインドするのを停止します。 –

答えて

2

これは、あなたがblocksを定義する方法である - クラス属性として。クラス属性は、クラスの単一のインスタンスに属しておらず、バインドされているクラスレベルのどこでも共有されます。各Gameオブジェクトを持つことが

blocks独自のを持って、あなたはblocksインスタンス属性になりたいです。 __init__メソッドでブロックの各インスタンスにブロックをバインドすると、すべてGameに独自のリストblocksがあります。

def __init__(self): 
    self.blocks = [] 
関連する問題