Python:如何保存对象状态并重新使用它

1 投票
2 回答
8492 浏览
提问于 2025-04-16 15:47

我想保存一个对象的状态,并在一段时间后重新使用它。
我找到了关于如何保存对象的例子(使用Pickle模块),但我不知道如何从保存的状态恢复类或方法,然后继续进行。

就像游戏一样,我们可以保存游戏,然后再继续。我知道在游戏中,我们保存所有的数据,游戏会读取这些数据并重建游戏。

我想保存完整的对象,当我恢复它时,它能从保存的状态开始工作。

例如:

class Test(objet):
   def doSomeWork(self):
     index = 0
     while index < 99999:
        print index 
        index  += 1
        if saveCondition:
          # suppose when condition become True index value is 100
          saveCondition = None
          saveTheObjectToFile() # this might be saved in file
restoreClassObject = getSavedObject() # get object from file
# Now this should start printing from 100
# I want to resume the object state when it was saved.

2 个回答

0

CPython没有像stackless那样的“继续”功能,所以你可能无法把整个程序的状态都保存到一个文件里。

你需要写一些代码,来把你的应用数据转换成可以存储的格式,然后把它放进一个文件里,这样才能实现保存功能。

1

最简单的方法是确保对象的状态不是保存在局部范围内,而是作为对象的属性。想象一下:

import cPickle

class Test(objet):
    def __init__(self, filename="mystate.pickle"):
        self.index = 0
        self.filename = filename

    def save(self):
        f = open(self.filename, 'w')
        cPickle.dump(self, f)
        f.close

    def doSomeWork(self):
        while self.index < 99999:
            print self.index 
            self.index  += 1
            if self.saveCondition:
              # suppose when condition become True index value is 100
              self.saveCondition = False
              self.save() # this might be saved in file

restoreClassObject = getSavedObject() # get object from file

当然,doSomeWork 这个方法本身没有什么意义,但为了这个例子,假设这个方法是一个线程,这样你就可以通过设置它的 restoreClassObject.saveCondition = True 来在下一次迭代时保存对象。

撰写回答