我尝试使用python的pickle将大量的自定义类序列化到磁盘上。但是,这些类没有正确序列化。在
看了docs这是我的理解,我要做的应该是有效的,但也许这不仅仅是因为我没有理解什么。在
我的类是在模块的顶层定义的。并且在尝试pickling时没有触发PicklingError异常。在
这是我的示例代码。取消对Save()的注释以进行序列化;取消对Load()的注释以进行加载。加载时,不会填充Term的同义词数组,但Term的主要对象被反序列化。通过检查从Load()函数返回的“loadedTerms”对象可以看到这一点。在
我做错什么了?谢谢。在
import pickle
class Entry:
Text = ""
def __init__(self, text):
self.Text = text
class Term:
Main = None
Synonyms = []
def Save():
term = Term()
term.Main = Entry("Dog")
term.Synonyms.append(Entry("Canine"))
term.Synonyms.append(Entry("Pursue"))
term.Synonyms.append(Entry("Follow"))
term.Synonyms.append(Entry("Plague"))
terms = []
terms.append(term)
with open('output.pickle', 'wb') as p:
pickle.dump(terms, p)
def Load():
loadedTerms = []
with open('output.pickle', 'rb') as p:
loadedTerms = pickle.load(p)
return loadedTerms
#Save()
#terms = Load()
Pickle只保存类的实例属性,但是
Synonyms
是一个在类级别定义的列表。您应该在__init__
-方法中创建列表:相关问题 更多 >
编程相关推荐