Si usted quiere tener la actualización automática de su clase a partir de una salmuera salvado ... que bastante tienen que utilizar __dict__.update
, ya que tiene en su propia respuesta. Sin embargo, es como un gato persiguiendo su cola ... ya que le pides a la instancia que esencialmente se "reinicie" con el estado anterior.
Hay un ligero ajuste en su respuesta. En realidad puedes saltear self
.
>>> import dill
>>> class Thing(object):
... def save(self):
... return dill.dumps(self)
... def load(self, obj):
... self.__dict__.update(dill.loads(obj).__dict__)
...
>>> t = Thing()
>>> t.x = 1
>>> _t = t.save()
>>> t.x = 2
>>> t.x
2
>>> t.load(_t)
>>> t.x
1
que utilizan loads
y dumps
en lugar de load
y dump
porque quería la salmuera para salvar a una cadena. Usar load
y dump
en un archivo también funciona. Y, de hecho, puedo usar dill
para extraer una instancia de clase en un archivo, para su uso posterior ... incluso si la clase se define interactivamente. Continuando desde arriba ...
>>> with open('self.pik', 'w') as f:
... dill.dump(t, f)
...
>>>
continuación, detener y reiniciar ...
Python 2.7.10 (default, May 25 2015, 13:16:30)
[GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import dill
>>> with open('self.pik', 'r') as f:
... t = dill.load(f)
...
>>> t.x
1
>>> print dill.source.getsource(t.__class__)
class Thing(object):
def save(self):
return dill.dumps(self)
def load(self, obj):
self.__dict__.update(dill.loads(obj).__dict__)
>>>
estoy usando dill
, que está disponible aquí: https://github.com/uqfoundation
pude conservar en vinagre el __dict__, pero luego No podría más tarde modificar la clase. – Mark