python中用户定义的类序列化和反序列化

2024-10-05 11:45:26 发布

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

我对python非常陌生:我想用python序列化和反序列化我的自定义对象。请指导我做同样的事。我有一个示例类:

import pickle  
import json

class MyClass():   
    variable = "blah"  
    num = 10

    def function(self):
        print("this is a message inside the class.")

    def get_variable():
        return variable

    def get_num():
        return num

def main():
    myObj = MyClass()
    with open('/opt/infi/deeMyObj.txt', 'w') as output:
        pickle.dump(myObj, output,pickle.HIGHEST_PROTOCOL)

    with open('/opt/infi/deeMyObj.txt', 'r') as input:
        myObjread = pickle.load(input)
        print myObjread.get_variable()
        print myObjread.get_num()

main()

我收到以下错误:

回溯(最近一次呼叫):

“文件”样品.py“,第30行,英寸

^{pr2}$

“文件”样品.py“,第27行,主要内容

print myObjread.get_variable()

TypeError:get_variable()不接受参数(给定1)

主要目的是读回对象。在


Tags: 对象importgetreturn序列化maindefmyclass
1条回答
网友
1楼 · 发布于 2024-10-05 11:45:26

要在jasonharper's comment上展开,get_variable和{}方法没有引用类的成员变量。他们应该把对象作为他们的第一个论据

class MyClass:
    ...
    def get_variable(self):
        return self.variable

我认为你的序列化代码没问题,但我可能错了。在

(旁白) 这有点离题,但需要注意的另一件事是:当您直接在class块中定义变量时,它们是在类上定义的,而不是在该类的对象上定义的。在这种情况下,这种情况正好可以解决,因为Python在对象上找不到同名的类级变量。但是,如果您在其中一个对象中存储一个列表并开始对其进行修改,那么您最终将在对象之间共享它,这可能不是您想要的。相反,您希望在__init__方法中定义它们:

^{pr2}$

相关问题 更多 >

    热门问题