ich heisse Rainer und versuche mich gerade in Python einzuarbeiten.
Ich habe ein Problem mit einer Klasse, die ich in eine Liste einfügen will. Dies funktioniert aber leider nicht. Die Instanz wird erzeugt und in die Liste eingefügt, aber die internen Variablen der Klasse werden immer gleich beschrieben. Ich bin davon ausgegangen, wenn ich die Instanz erzeuge, dass dann auch ein neuer Speicherbereich reserviert wird (so wie in C++ mit new). Aber es wird immer die gleiche interne Variable beschrieben.
Da das Ganze ziemlich verwirrend ist, habe ich mal den Code und die Ausgabe unten reingestellt.
Code: Alles auswählen
klassenliste = []
class myclass():
__myvar = []
def __init__(self, FileName):
self.__csvFileName = FileName
#self.__myvar = []
self.__myvar.append(FileName)
def getFilename(self):
return self.__csvFileName, self.__myvar
def testfunc():
for i in range(10):
x = myclass("Test"+str(i))
klassenliste.append(x)
for i in range(10):
print(klassenliste[i].getFilename())
if __name__ == '__main__':
testfunc()
Wenn ich dagegen folgendes mache:('Test0', ['Test0', 'Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6', 'Test7', 'Test8', 'Test9'])
('Test1', ['Test0', 'Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6', 'Test7', 'Test8', 'Test9'])
('Test2', ['Test0', 'Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6', 'Test7', 'Test8', 'Test9'])
('Test3', ['Test0', 'Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6', 'Test7', 'Test8', 'Test9'])
('Test4', ['Test0', 'Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6', 'Test7', 'Test8', 'Test9'])
('Test5', ['Test0', 'Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6', 'Test7', 'Test8', 'Test9'])
('Test6', ['Test0', 'Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6', 'Test7', 'Test8', 'Test9'])
('Test7', ['Test0', 'Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6', 'Test7', 'Test8', 'Test9'])
('Test8', ['Test0', 'Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6', 'Test7', 'Test8', 'Test9'])
('Test9', ['Test0', 'Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6', 'Test7', 'Test8', 'Test9'])
Code: Alles auswählen
class myclass():
#__myvar = []
def __init__(self, FileName):
self.__csvFileName = FileName
self.__myvar = []
self.__myvar.append(FileName)
def getFilename(self):
return self.__csvFileName, self.__myvar
def testfunc():
for i in range(10):
x = myclass("Test"+str(i))
klassenliste.append(x)
for i in range(10):
print(klassenliste[i].getFilename())
if __name__ == '__main__':
testfunc()
Ich muss die Variable im Init angeben, dann funktioniert alles richtig. Ist das nicht so, wenn ich die Variable im Kopf der Klasse angebe, dass hier auch ein neuer Speicherbereich reserviert wird? Dies kenn ich von C++ so, daher hatte ich das bei Python auch angenommen. Oder mache ich etwas anderes falsch?'Test0', ['Test0'])
('Test1', ['Test1'])
('Test2', ['Test2'])
('Test3', ['Test3'])
('Test4', ['Test4'])
('Test5', ['Test5'])
('Test6', ['Test6'])
('Test7', ['Test7'])
('Test8', ['Test8'])
('Test9', ['Test9'])
Danke im Voraus für eine Antwort.
Rainer