pickle ist eine Standardbibliothek zum Serialisieren von Python-Objekten in Bytes zur Speicherung in Dateien und dergleichen. Auswählbare Objekte können ausgewählt werden, und das Wiederherstellen eines Objekts aus einer serialisierten Byte-Zeichenfolge wird als Unpickle bezeichnet.
Pickle versucht standardmäßig, die Attribute von in __dict__
registrierten Objekten zu serialisieren. Sie können das Verhalten jedoch anpassen, indem Sie eine spezielle Methode für pickle definieren. Insbesondere wird es verwendet, wenn das Objekt, das ausgewählt werden soll, ein Objekt hat, das nicht als Mitglied ausgewählt werden kann, oder wenn das Objekt von einem Konstruktor erstellt wird, der ein Argument akzeptiert.
Methode | Anwendungszweck |
---|---|
__getnewargs__() |
Geben Sie das Argument an, das beim Aufheben der Auswahl an den Konstruktor übergeben werden soll. |
__getstate__() |
__dict__ Wählen Sie stattdessen das von dieser Methode zurückgegebene Objekt aus. |
__setstate__(state) |
Empfängt das eingelegte Objekt als Status und führt die Verarbeitung zum Zeitpunkt des Aufhebens aus. |
Der folgende Code ist ein Beispielskript, um das Verhalten dieser Methoden zu sehen.
python
import pickle
class Foo:
def __new__(self, a):
print('in __new__:', a)
self = object.__new__(self)
# self.a = a
return self
def __init__(self, a):
print('in __init__:', a)
self.a = a
def __getstate__(self):
print('in __getstate__:', self.a)
state = self.__dict__.copy()
return state
def __getnewargs__(self):
print('in __getnewargs__:', self.a)
return (2 * self.a,)
def __setstate__(self, state):
self.__dict__.update(state)
print('in __setstate__:', self.a)
foo = Foo(3)
bar = pickle.dumps(foo)
baz = pickle.loads(bar)
print(baz.__dict__)
Das Ergebnis der Ausführung dieses Skripts ist wie folgt.
python
in __new__: 3
in __init__: 3
in __getnewargs__: 3
in __getstate__: 3
in __new__: 6
in __setstate__: 3
{'a': 3}
Wie im Essiggurkenhandbuch angegeben, können Sie Folgendes sehen.
--__getnewargs__
wird beim Beizen aufgerufen. Mit anderen Worten, die Informationen des Arguments, das beim Entpicken an "new" übergeben wird, werden eingelegt.
__init__
auf.