nehme an, ich habe eine einfache Python Klassendefinition in einer Datei myClass.pyPickle mit benutzerdefinierten Klassen
class Test:
A = []
Und ich habe auch zwei Testskripte. Das erste Skript erstellt ein Objekt vom Typ Test, füllt das Array A auf und packt das Ergebnis in eine Datei. Es entpackt es sofort aus der Datei und das Array ist immer noch gefüllt. Das zweite Skript wird einfach aus der Datei entfernt und das Array wird nicht aufgefüllt (d. H. A == []). Warum ist das?
test1.py
import myClass
import pickle
x = myClass.Test()
for i in xrange(5):
x.A.append(i)
f = open('data', 'w')
pickle.dump(x,f)
f.close()
f = open('data')
y = pickle.load(f)
f.close
print y.A
und test2.py
import myClass
import pickle
f = open('data')
y = pickle.load(f)
f.close
print y.A
Bedeutet dies, dass, wenn Sie die Klasse selbst gebeizt hatte, 'pickle.dump (Test)' und ungebeizte dann die Klasse, würden Sie die richtige Liste 'A' in beiden Fällen zurück bekommen haben? – BallpointBen
@BallpointBen, nein, es würde nicht das Klassenattribut erhalten, wie [was-kann-pickled-and-unpickled] (https://docs.python.org/3/library/pickle.html#what- can-pickled-and-pickled): "Klassen werden nach benanntem Verweis gebeizt, daher gelten die gleichen Einschränkungen in der Umgebung für nicht entkoppelten Zugriff. Beachten Sie, dass der Code oder die Daten der Klasse nicht aktiviert sind." – jdi