Klassenkonstruktor - Liste nicht überschrieben
Verfasst: Do Sep 01, 2011 4:54 pm
Hallo und Entschuldigung für den nichtssagenden Titel, bin nur gerade ein Bisschen verwirrt.
Ich wollte in einer Schleife ein Objekt anlegen, ein paar Einträge an eine Liste anhängen und das Objekt dann per yield zurückgeben. Ungefär so:
Komm aber drauf: die liste wird immer Länger!!
Also mein Grundgedanke war, dass das Objekt in jedem Durchlauf überschrieben wird und so nur eine zahl enthalten sollte. Dem ist offensichtlich nicht so.
Ein workaroud ist übrigens bei der Konstruktion explizit eine leere Liste zu übergeben: obj = MyClass(mylist=[]).
Ich würde trotzdem gerne verstehen was hier passiert.
Hat jemand eine Idee??
Gleiches Verhalten mit 3.1.3 und 2.6.6
Ich wollte in einer Schleife ein Objekt anlegen, ein paar Einträge an eine Liste anhängen und das Objekt dann per yield zurückgeben. Ungefär so:
Code: Alles auswählen
#!/usr/bin/python3
class MyClass:
def __init__(self, mylist=[]):
self.mylist = mylist
for i in range(5):
obj = MyClass()
print("obj.mylist:", obj.mylist)
obj.mylist.append(i)
# yield obj
Code: Alles auswählen
$ python3 testloop.py
obj.mylist: []
obj.mylist: [0]
obj.mylist: [0, 1]
obj.mylist: [0, 1, 2]
obj.mylist: [0, 1, 2, 3]
Ein workaroud ist übrigens bei der Konstruktion explizit eine leere Liste zu übergeben: obj = MyClass(mylist=[]).
Ich würde trotzdem gerne verstehen was hier passiert.
Hat jemand eine Idee??
Gleiches Verhalten mit 3.1.3 und 2.6.6