Zdefiniowałem klasę Listener
i utworzyłem słownik obiektów Listener
. Każdy słuchający ma id
, aby je zidentyfikować, oraz listę artists
, której słuchają, artists = []
. Dodanie czegoś do listy artists
dodaje ją do wszystkich wystąpień klasy Listener
, a nie do polecanej instancji. To jest mój problem.Wyświetl jako członka klasy Pythona, dlaczego jego zawartość jest udostępniana we wszystkich instancjach klasy?
Klasa Listener jest zdefiniowany następująco:
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
Oto moja debugowanie kodu testu:
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)
a wyjście:
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']
Moje oczekiwany wynik jest taki, że Ostateczne połączenie addArtist("Ace of Base", 5)
spowoduje wygenerowanie wyniku
1
pre: []
post: ['Ace of Base']
Czy to subtelność Pythona, którego nie rozumiem? Dlaczego to jest wyjście i jak mogę zamiast tego uzyskać pożądany wynik? Dzięki!