我正在编写一个应该或多或少地连续运行的程序。如果我终止程序,或者它抛出错误,我希望保存所有对象实例。为此,我使用jsonpickle保存所有实例。当程序继续时,我想继续我离开的地方。我的想法是做类似以下的事情:
class A(object):
def __init__(self):
try:
with open('A.json', 'r') as fp:
self = jsonpickle.decode(json.load(fp))
except IOError:
self.X = 'defaultvalue'
self.Y = 'defaultvalue'
其中A.json包含以前使用jsonpickle保存的A实例(该部分有效)。但是,我的代码不会覆盖self。
我怀疑我必须在__new__中实现我想做的事情。我阅读了文档,但是我有点迷失了。如果能以一种好的方式实现我想要的东西,我将不胜感激。
答案 0 :(得分:0)
我不知道jsonpicle,但是使用JSON你可以做这样的事情:
import json
class ClassA(object):
def __init__(self):
try:
with open('A.json', 'r') as fp:
self.__dict__ = json.loads(fp.read())
except IOError:
self.X = 'defaultvalue'
self.Y = 1
def __del__(self):
with open('A.json', 'wb') as fp:
fp.write( json.dumps( self.__dict__) )
if __name__ == "__main__":
myobj = ClassA()
print "GOT X : " + str(myobj.X)
print "GOT Y : " + str(myobj.Y)
myobj.X += " RUN ME AGAIN "
myobj.Y += 1
myobj = None
请注意垃圾收集器调用__del__
;至少对我来说,如果我没有myobj = None
那么它完全失败了。
无论如何,如果你只是假设你可以在关机时总是在磁盘上写东西,那么你最终会遇到麻烦;想想拔出电源插头会发生什么:我建议尽快写(并调用一些刷新功能,以确保修改也写入磁盘)。