保存到文件并加载具有其属性的python类的实例

时间:2013-06-20 16:58:12

标签: python class attributes instance pickle

我正在使用python进行数据分析,并希望找到一种将类的实例保存到文件的好方法,以便稍后可以在保持其属性值的情况下重新加载它。特别是,此类的实例将加载作为其他类的实例的对象,然后执行需要一段时间才能完成的处理器密集型比较。

例如:

import pickle

class MyClass():
    def __init__(self):
        self.info = OtherClass(option=1)

    def pickle(self):
        f = file('test_file', 'wb')
        pickle.dump(self, f, pickle.HIGHEST_PROTOCOL)
        f.close()

    def unpickle(self):
        f = file('test_file', 'rb')
        pickle.load(f)
        f.close()


class OtherClass():
    def __init__(self, option):
        self.property = option * 2


mydata = MyClass(option=5)

mydata.pickle()

然后导入此模块并运行mydata.unpickle()以获取mydata(我还有一个选项,用于查找文件是否在之前被pickle并暂停计算并调用OtherClass实例(如果有)。 现在,如果我这样做,我可以加载mydata,但它不再有mydata.info对象。我的理解是,这是泡菜的一个有意的部分,但有没有办法完全保存mydata,以便我以后可以使用它?

1 个答案:

答案 0 :(得分:2)

您对所加载的数据一无所知。

class MyClass():
    ...
    @staticmethod
    def unpickle():
        with file('test_file', 'rb') as f:
            return pickle.load(f)

data = MyClass.unpickle()