[PYTHON] Testmethoden zum Anpassen des Pickle-Verhaltens

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.

Recommended Posts

Testmethoden zum Anpassen des Pickle-Verhaltens
Testautomatisierung für die Arbeit
Hypothesentest zur Produktverbesserung
Für die Prüfung G-Test 2020 # 2
Testcode zur Bewertung von Dekorateuren
Python-Vorlage für Codeforces-manuelle Test-