クラスListener
を定義し、Listener
というオブジェクトの辞書を作成しました。各リスナーには、それを識別するためのid
と、聞き取るartists
のリスト、artists = []
があります。 artists
リストに何かを追加すると、参照されるインスタンスではなく、Listener
クラスのすべてのインスタンスに追加されます。これは私の問題です。Pythonクラスのメンバーとしてリストすると、クラスのすべてのインスタンスでそのコンテンツが共有されるのはなぜですか?
次のようにリスナークラスが定義されています。ここでは
class Listener:
id = ""
artists = []
def __init__(self, id):
self.id = id
def addArtist(self, artist, plays):
print self.id # debugging...
print "pre: ", self.artists
self.artists.append(artist)
print "post: ", self.artists
は私のデバッグテストコードです:
def debug():
listeners = {}
listeners["0"] = Listener("0")
listeners["1"] = Listener("1")
listeners["0"].addArtist("The Beatles", 10)
listeners["0"].addArtist("Lady Gaga", 4)
listeners["1"].addArtist("Ace of Base", 5)
そして出力:
0
pre: []
post: ['The Beatles']
0
pre: ['The Beatles']
post: ['The Beatles', 'Lady Gaga']
1
pre: ['The Beatles', 'Lady Gaga']
post: ['The Beatles', 'Lady Gaga', 'Ace of Base']
私の予想出力はということです最後のaddArtist("Ace of Base", 5)
コールは出力になります
1
pre: []
post: ['Ace of Base']
これはPythonの微妙なことですがわからないのですか?なぜこれが出力され、代わりに希望の出力を得ることができますか?ありがとう!
あなたはメンバーがクラス内で宣言さが、ちょうど__init__
方法で設定されたくない