为什么Pickle没有序列化我的类数组?

2024-10-01 05:04:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用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()

Tags: 对象text序列化savedefloadpickleclass
1条回答
网友
1楼 · 发布于 2024-10-01 05:04:36

Pickle只保存类的实例属性,但是Synonyms是一个在类级别定义的列表。您应该在__init__-方法中创建列表:

import pickle

class Entry:
    def __init__(self, text):
       self.Text = text

class Term:
    def __init__(self):
        self.Main = None
        self.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():
    with open('output.pickle', 'rb') as p:
        loadedTerms = pickle.load(p)
    return loadedTerms

相关问题 更多 >