Hallo, ich habe ein Problem beim Copieren einer Instance einer komplexen Klasse mit deepcopy. Immer wenn ich versuche eine Kopie meiner Instance zu erstellen, bekomme ich eine Fehlermeldung, dass ein Übergabeparameter fehlt. als Beispiel: meine Instance heist symbol symbol2 = copy.deepcopy(symbol) daraus folgt die Meldung: . . . . . File "C:\PYTHON23\lib\copy.py", line 179, in deepcopy y = copier(x, memo) File "C:\PYTHON23\lib\copy.py", line 298, in _deepcopy_inst y = x.__class__(*args) TypeError: __init__() takes exactly 2 arguments (1 given) Ich habe gelesen, dass ich deepcopy ein Memo übergeben muß, nur kann ich leider nicht rausfinden wie man das macht. Versucht habe ich es mit "copy.deepcopy(symbol, symbol.__dict__)", aber ehrlich gesagt, habe ich noch nicht richtig verstanden, was es mit dem Memo auf sich hat und ob ich totalen Blödsinn gemacht habe. Kann mir einer helfen? Gruss Simon _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
Simon Plum schrieb:
Hallo, ich habe ein Problem beim Copieren einer Instance einer komplexen Klasse mit deepcopy. Immer wenn ich versuche eine Kopie meiner Instance zu erstellen, bekomme ich eine Fehlermeldung, dass ein Übergabeparameter fehlt.
als Beispiel:
meine Instance heist symbol
symbol2 = copy.deepcopy(symbol)
daraus folgt die Meldung: . . . . . File "C:\PYTHON23\lib\copy.py", line 179, in deepcopy y = copier(x, memo) File "C:\PYTHON23\lib\copy.py", line 298, in _deepcopy_inst y = x.__class__(*args) TypeError: __init__() takes exactly 2 arguments (1 given)
Ich habe gelesen, dass ich deepcopy ein Memo übergeben muß, nur kann ich leider nicht rausfinden wie man das macht. Versucht habe ich es mit "copy.deepcopy(symbol, symbol.__dict__)", aber ehrlich gesagt, habe ich noch nicht richtig verstanden, was es mit dem Memo auf sich hat und ob ich totalen Blödsinn gemacht habe. Kann mir einer helfen? Gruss Simon
Also wenn ich http://www.python.org/doc/current/lib/module-copy.html richtig lese brauchst Du dich nicht um das memo kümmern, das paasiert nur intern. Ich vermute mal für eine Kopie wird eine neue Instanz deines Objektes angelegt. Und zwar ohne irgendwelche Parameter für den Konstruktor, weil die ja nicht bekannt sind und copy die internen Werte ja später selbst einfügt. (Aber da kannst Du mit __getinitargs__ Abhilfe schaffen. Siehe obige Webseite weiter unten.) Dann ergibt auch die Fehlermeldung Sinn, wenn dein Konstruktor unbedingt einen Parameter haben will. (Oder irgendeine der Membervariablen?) Das wäre meine Vermutung, aber zumindest mit Python 2.2 scheint das nicht die Ursache für dein Problem zu sein. Aber vielleicht weiss ja jemand ob das in 2.3 jetzt anders ist. (Im Code von 2.2 habe ich zumindest für das Instanzkopieren keinen Konstruktur aufruf gefunden, oder den übersehen.) Übrigens wäre es sinnvoll, nächstes Mal auch den Aufbau deiner Klasse zu posten, damit man es selber nachvollziehen kann. MfG Rene Liebscher ----------- ~> python Python 2.2.2 (#1, Apr 18 2003, 08:23:15) [GCC 3.3 20030226 (prerelease) (SuSE Linux)] on linux2 Type "help", "copyright", "credits" or "license" for more information.
class A: ... def __init__(self,x): ... pass ... a=A() Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: __init__() takes exactly 2 arguments (1 given) a=A(0) import copy b=copy.deepcopy(a) b <__main__.A instance at 0x817da8c>
_______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
participants (2)
-
René Liebscher
-
Simon Plum