2011-10-25 7 views
3

オブジェクトに問題があります。新しいPythonオブジェクトの作成は同じオブジェクトのようです

次のコード

class Data: 
    def __init__(self,data=[]): 
     self.data = data 
    def add(self,data): 
     self.data.extend(data) 

class Parent: 
    def testa(self): 
     a = Data() 
     a.add('a') 
     print a.data 
    def testb(self): 
     b = Data() 
     b.add('b') 
     print b.data 

if __name__ == "__main__": 
    p = Parent() 
    p.testa() 
    p.testb() 

は、次のような出力を生成します

[] 
['a'] 
['a'] 
['a', 'b'] 

なぜ作成した新しいオブジェクトが存在しないのですか? 2回目のtestbでは、以前のDataオブジェクトがまだ存在しているようですが、それは私的な変数にあります。

新しいオブジェクトが作成されるようにコードを変更するにはどうすればよいですか?

+0

緑色のチェックマークをクリックして、あなたに適した回答を受け入れることを忘れないでください。 –

答えて

10

関数のデフォルト引数として[]を使用すると、リストは1回だけ作成され、各呼び出しでこのリストが再利用されます。説明はhttp://docs.python.org/tutorial/controlflow.html#default-argument-valuesを参照してください。したがって、Dataオブジェクトは両方とも、self.dataメンバーによって参照されるリストを共有します。

あなたはこのようなあなたのコードを変更する必要があります

class Data: 
    def __init__(self, data=None): 
     if data is None: 
      data=[] 
     self.data = data 
    def add(self, data): 
     self.data.extend(data) 

これはあなたの問題を解決する必要があります。

+0

@BartVanherck、これで問題が解決する場合は、この回答を解決策としてマークする必要があります。 – danihp

関連する問題