2014-09-24 37 views
0

我正在编写一个应该或多或少持续运行的程序。如果我终止程序,或者如果它引发错误,我希望保存所有对象实例。为此,我使用jsonpickle保存所有实例。当程序继续时,我想继续完全停止的地方。我的想法是这样做的以下内容:从json覆盖自我

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(那部分作品)以前保存的一个实例。但是,自我并没有被我的代码覆盖。

我怀疑我必须在__new__中实现我想要做的事情。我阅读了文档,但是我有点失落。我很感激任何关于如何以一种好的方式实现我想要的建议。

+0

我真的怀疑它的运行比无限多。 – Hoopdady 2014-09-24 13:28:14

+1

所以你只能有一个'A'类的实例?为什么不在课堂外进行拆除? – 2014-09-24 13:35:38

回答

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那就完全失败了。

无论如何,如果你只是假设你可以随时在关机时在磁盘上写入东西,你将会陷入困境;想想你拔出电源插头会发生什么:我建议尽快写入(并调用一些刷新功能以确保修改也能写入磁盘)。