Also der ganze Code meiner Klasse wäre zu viel um ihn zu posten, aber im großen und ganzen enthält die Klasse normale Membervariablen. Besonders ist vielleicht, dass es eine Referenz auf die Aufrufende Klasse gespeichert wird und die Klasse selbst eine endliche Anzahl an Instanzen von anderen Klassen besitzt. Etwa so: class a: def __init__(self, y): self._y = y class b: def __init__(self, z): self._z = z class symbol: def __init__(self, parent, x): self._parent = parent list1 = [] list2 = [] Y1 = class(y) Y2 = class(y) Y3 = class(y) Y4 = class(y) Z1 = class(z) list1.append(Y1) list1.append(Y2) list1.append(Y3) list1.append(Y4) list2.append(Z1) ... ... ... ... 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 (1)
-
Simon Plum