社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Deepa • 6 年前 • 442 次点击  

我对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
 
442 次点击  
文章 [ 1 ]  |  最新文章 6 年前
Harry Cutts
Reply   •   1 楼
Harry Cutts    7 年前

展开 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"