Py学习  »  Python

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

Deepa • 4 年前 • 299 次点击  

我对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()

我遇到以下错误:

回溯(最近一次呼叫的最后一次):

文件“sample.py”,第30行,in

main()

文件“sample.py”,第27行,主

print myObjread.get_variable()

类型错误:get_variable()不接受任何参数(给定1个)

主要目的是读回物体。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38017
 
299 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Harry Cutts
Reply   •   1 楼
Harry Cutts    5 年前

展开 jasonharper's comment 你的 get_variable get_num 方法没有引用类的成员变量。他们应该将对象作为第一个参数,例如

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

我认为您的序列化代码是可以的,但我可能错了。

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

class MyClass:
    def __init__(self):
        self.variable = "blah"