Allgemeine Frage zum hinzufügen zu Liste in Klasse
Verfasst: Sonntag 2. Januar 2011, 16:03
Hi ihr alle,
das ist mein erster Post, ich hoffe, dass das mit dem Code highlighten funktioniert, ich bitte um Umsicht
Des weiteren arbeite ich noch nicht sehr lange mit Python, wie ihr vielleicht gleich merken werdet.
Ich bin vorhin auf ein Problem gestoßen, als ich etwas an eine Liste in einer selbst definierten Klasse anhängen wollte. Das ganze sah im Kerne so aus:
Die Print Funktion gibt jetzt "200 [1, 2, 3, 4]" und "300 [1, 2, 3, 4]" zurück, das heißt die beiden x in den Instanzen sind wie erwartet unabhängig voneinander, die beiden Listen sind jedoch irgendwie die selben, ich hatte erwartet dass in einer [1, 2] und in der andern [3, 4] steht.
Das ganze lässt sich beheben, wenn ich die Klasse anders definiere:
Sollten Attribute immer im __init__ Teil einer Klasse definiert werden? Ich war bisher davon ausgegangen, der __init__ Teil wäre eher dazu da Parameter beim erstellen einer Instanz zu verarbeiten. Ich verstehe nicht so recht, weshalb im oberen Beispiel die Listen in zwei verschiedenen Instanzen der Klasse scheinbar Referenzen voneinander sind und sich wie eine einzige verhalten, die beiden x aber unabhängig voneinander sind. Jegliche Form der Aufklärung würde ich sehr begrüßen...
Liebe Grüße, Annie
Edit: highlighting von code auf code=python geändert
das ist mein erster Post, ich hoffe, dass das mit dem Code highlighten funktioniert, ich bitte um Umsicht
Des weiteren arbeite ich noch nicht sehr lange mit Python, wie ihr vielleicht gleich merken werdet.
Ich bin vorhin auf ein Problem gestoßen, als ich etwas an eine Liste in einer selbst definierten Klasse anhängen wollte. Das ganze sah im Kerne so aus:
Code: Alles auswählen
class TestClass:
x = None
lst = []
inst1 = TestClass()
inst2 = TestClass()
inst1.x = 200
inst1.lst.append(1)
inst1.lst.append(2)
inst2.x = 300
inst2.lst.append(3)
inst2.lst.append(4)
print(inst1.x, inst1.lst)
print(inst2.x, inst2.lst)
Das ganze lässt sich beheben, wenn ich die Klasse anders definiere:
Code: Alles auswählen
class TestClass:
def __init__(self):
self.x = None
self.lst = []
Liebe Grüße, Annie
Edit: highlighting von code auf code=python geändert