Python:如何保存对象状态并重新使用它
我想保存一个对象的状态,并在一段时间后重新使用它。
我找到了关于如何保存对象的例子(使用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
来在下一次迭代时保存对象。