0

我正在编写一个应该或多或少连续运行的程序。如果我终止程序,或者如果它抛出错误,我希望保存所有对象实例。为此,我使用 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__ 中实现我想做的事情。我阅读了文档,但是我有点迷茫。对于如何以一种好的方式实现我想要的东西,我将不胜感激。

4

1 回答 1

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那里,它完全失败了。

无论如何,如果您只是假设始终可以在关机时将内容写入磁盘,那么您最终会遇到麻烦。想想拔掉电源插头会发生什么:我建议尽快进行写入(并调用一些刷新功能以确保修改也确实写入磁盘)。

于 2014-09-24T13:45:34.347 回答