Ich bin noch ziemlich neu in Python und noch neuer zum Beizen. Ich habe eine Klasse Vertex(ScatterLayout)
mit einem __getnewargs__()
:Beizen Schwachstelle in Python
def __getnewargs__(self):
return (self.pos, self.size, self.idea.text)
Mein Verständnis ist, dass dies die Beize bewirkt das Objekt aus __getnewargs__()
anstatt das Objekt Wörterbuch beizen.
Die Gurke wird in dem folgenden Verfahren (in einer anderen Klasse MindMapApp(App)
) genannt:
def save(self):
vertices = self.mindmap.get_vertices()
edges = self.mindmap.get_edges()
output = open('mindmap.pkl', 'wb')
#pickle.dump(edges, output, pickle.HIGHEST_PROTOCOL)
pickle.dump(vertices, output, pickle.HIGHEST_PROTOCOL)
output.close()
Als ich die save()
Methode, die ich die folgende Fehlermeldung erhalten rufen:
pickle.PicklingError: Can't pickle <type 'weakref'>: it's not found as __builtin__.weakref
Was bin ich fehlt oder nicht verstehen? Ich habe auch versucht, die __getstate__()
/ Kombination mit dem gleichen Ergebnis zu implementieren.
meinst du Klasse __getnewargs__ hat und das wird Fehler verursachen, wenn pickle.dump tun (a), wenn Angenommen, Klasse A und a = A()? Weil ich es versuche und keine Fehlerrückgabe, könnten Sie mehr Details über Problem geben? mag, wie deine Klasse definiert – linpingta
Ich denke, das Problem ist, dass ich zwei Dinge wissen muss: a) Wie man mit Schwächen umgehen, wenn eine Klasse in Essig eingelegt wird; b) Warum wird ein weakref erzeugt, wenn die Items, die gebeizt werden, von '__getnewargs __()' zurückgegeben werden. –
Sie picken nicht die Klasseninstanz (d. H. 'Self'), Sie beizen' Vertices'. Das ist vermutlich ein "weakref". – roippi