Klassenvariablenwörterbuch wird mit pickle.dump in Python 2.7 nicht gespeichert
Ich verwende pickle, um ein Objektdiagramm zu speichern, indem ich die Wurzel lösche. Wenn ich die Wurzel lade, hat sie alle Instanzvariablen und verbundenen Objektknoten. Ich speichere jedoch alle Knoten in einer Klassenvariablen vom Typ Wörterbuch. Die Klassenvariable ist voll, bevor sie gespeichert wird, aber nachdem ich die Auswahl aufgehoben habe, ist sie leer.
Hier ist die Klasse, die ich benutze:
class Page():
__crawled = {}
def __init__(self, title = '', link = '', relatedURLs = []):
self.__title = title
self.__link = link
self.__relatedURLs = relatedURLs
self.__related = []
@property
def relatedURLs(self):
return self.__relatedURLs
@property
def title(self):
return self.__title
@property
def related(self):
return self.__related
@property
def crawled(self):
return self.__crawled
def crawl(self,url):
if url not in self.__crawled:
webpage = urlopen(url).read()
patFinderTitle = re.compile('<title>(.*)</title>')
patFinderLink = re.compile('<link rel="canonical" href="([^"]*)" />')
patFinderRelated = re.compile('<li><a href="([^"]*)"')
findPatTitle = re.findall(patFinderTitle, webpage)
findPatLink = re.findall(patFinderLink, webpage)
findPatRelated = re.findall(patFinderRelated, webpage)
newPage = Page(findPatTitle,findPatLink,findPatRelated)
self.__related.append(newPage)
self.__crawled[url] = newPage
else:
self.__related.append(self.__crawled[url])
def crawlRelated(self):
for link in self.__relatedURLs:
self.crawl(link)
Ich speichere es so:
with open('medTwiceGraph.dat','w') as outf:
pickle.dump(root,outf)
und ich lade es wie folgt:
def loadGraph(filename): #returns root
with open(filename,'r') as inf:
return pickle.load(inf)
root = loadGraph('medTwiceGraph.dat')
Alle Daten mit Ausnahme der Klassenvariablen __crawled werden geladen.
Was mache ich falsch?