__reduce__ und __reduce_ex__

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
albertus
User
Beiträge: 52
Registriert: Mittwoch 7. Juli 2010, 14:48

Guten Morgen,

wenn man die Magic Methode __reduce__ in seine Selbst-gestrickten Klassen implementiert, erlaubt man pickle neue Objekte durch den Aufruf von __init__ zu konstruieren. So weit so gut :) auch mit der Umsetzung hapert es nicht :D, ich müsste jetzt eigentlich Glücklich und Zufrieden sein. Bin ich aber nicht :wink: den ich Frage mich, die ganze Zeit was man mit der Methode __reduce_ex__ machen kann.

Laut Python Doku kann es manchmal nützlich sein die, Pickle Protokoll-Version beim "reduzieren" mit zu übergeben, aber mir fällt einfach keine sinnvolle Idee ein und das obwohl ich seit zwei Tagen darüber nachdenke :!: . Ich habe auch schon bei http://www.koders.com/ danach gesucht und nichts passendes gefunden. Vielleicht hat ja hier jemand eine Idee wie man __reduce_ex__ sinnvoll einsetzen könnte.

Schon mal Danke für die Ideen

Albertus
Mit freundlichen Grüßen

Albertus
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Du kannst die "ex"-Variante als eine Fehlerkorrektur ansehen. Die alte "__reduce__"-Methode konnte/wollte man nicht mehr ändern, also hat mal, als erkannt wurde, dass es sinnvoll sein kann, die Protokollversion zu erkennen (also ob z.B. ASCII oder Binär gepickelt wird) und man hat eine weitere Methode definiert, die statt der alten Methode benutzt wird, wenn sie vorhanden ist. Python 3 benutzt noch mal wieder eine andere Version des Pickle-Protokolls, sodass es auch hier interessant sein kann, zu wissen, ob 0 (der Standard unter 2.x) oder 3 (der Standard unter 3.x) benutzt wird.

Stefan
albertus
User
Beiträge: 52
Registriert: Mittwoch 7. Juli 2010, 14:48

Erst mal danke für die Antwort,

ich werde __reduce__ einfach mal umbenennen und schauen was passiert.
Mit freundlichen Grüßen

Albertus
Antworten