copyreg — Register pickle Unterstützung Funktionen

Quellcode: Lib/copyreg.py


Das Modul copyreg bietet eine Möglichkeit, Funktionen zu definieren, die beim Serialisieren spezifischer Objekte verwendet werden. Die Module pickle und copy verwenden diese Funktionen beim Serialisieren/Kopieren dieser Objekte. Das Modul stellt Konfigurationsinformationen über Objektkonstruktoren bereit, die keine Klassen sind. Solche Konstruktoren können Fabrikfunktionen oder Instanzen von Klassen sein.

copyreg.constructor(object)

Deklariert object als gültigen Konstruktor. Wenn object nicht aufrufbar ist (und somit nicht als Konstruktor gültig ist), wird TypeError ausgelöst.

copyreg.pickle(type, function, constructor_ob=None)

Deklariert, dass function als "Reduktionsfunktion" für Objekte vom Typ type verwendet werden soll. function muss entweder einen String oder ein Tupel mit zwei bis sechs Elementen zurückgeben. Weitere Details zur Schnittstelle von function finden Sie in der dispatch_table.

Der Parameter constructor_ob ist eine Legacy-Funktion und wird nun ignoriert, muss aber, wenn er übergeben wird, aufrufbar sein.

Beachten Sie, dass das Attribut dispatch_table eines Pickler-Objekts oder einer Unterklasse von pickle.Pickler ebenfalls zur Deklaration von Reduktionsfunktionen verwendet werden kann.

Beispiel

Das folgende Beispiel soll zeigen, wie eine Pickle-Funktion registriert wird und wie sie verwendet wird

>>> import copyreg, copy, pickle
>>> class C:
...     def __init__(self, a):
...         self.a = a
...
>>> def pickle_c(c):
...     print("pickling a C instance...")
...     return C, (c.a,)
...
>>> copyreg.pickle(C, pickle_c)
>>> c = C(1)
>>> d = copy.copy(c)
pickling a C instance...
>>> p = pickle.dumps(c)
pickling a C instance...