python学习-序列化对象(pickle)

文章目录

  • 序列化(pickle)

序列化(pickle)

序列化对象,引入内置模块:
import pickle
序列化写文件使用二进制的方式去写,需要使用wb
我在定义时,类成员变量使用了__修饰,表示私有成员,所以需要添加get函数获取__name对象的值。
如果直接使用__name,则会报错。
为了做对比,定义了name和__name变量。
注意:自定义python文件的文件名时,不要和python模块名相同,否则会引入编译错误



import pickle


class person:
    def __init__(self, name, age):
        self.name = name
        self.__name = name
        self.age = age
        self.__age = age

    def getName(self):
        return self.__name

    def getAge(self):
        return self.__age

    def save(self):
        print("hello, this is {}, age is {}".format(self.__name, self.__age))


p1 = person(name="jack", age=10)

f = open('p1', mode='wb')

pickle.dump(p1, f)
f.close()

使用时,__name不能直接获取,会报错。而name则可以。
python学习-序列化对象(pickle)_第1张图片

以上代码就是把p1对象序列化到了p1文件中。
接下来学习如何使用:


class person:
    def __init__(self, name, age):
        self.name = name
        self.__name = name
        self.age = age
        self.__age = age

    def getName(self):
        return self.__name

    def getAge(self):
        return self.__age

    def save(self):
        print("hello, this is {}, age is {}".format(self.__name, self.__age))


# 序列化对象的加载
import pickle

f = open('p1', mode='rb')
p2 = pickle.load(f)
f.close()

print(p2, p2.name, p2.age)
print(p2, p2.getName(), p2.getAge())
p2.save()

修改成正确代码,运行结果:
python学习-序列化对象(pickle)_第2张图片
代码里面的p2其实就是之前的p1对象。
有一点需要注意:自定义类型,需要把定义的类型分享出来才能使用。
这点需要注意。

你可能感兴趣的:(python,python,编程语言)