Digamos que tengo una clase:
class Thing(object): cachedBar = None def __init__(self, foo): self.foo = foo def bar(self): if not self.cachedBar: self.cachedBar = doSomeIntenseCalculation() return self.cachedBar
Para obtener algunos cálculos intensos, así que lo almaceno en la memoria para acelerar las cosas.
Sin embargo, cuando decapito una de estas clases no quiero que cachedBar
de cachedBar
.
¿Puedo marcar cachedBar como volátil / transitorio / no seleccionable?
De acuerdo con la documentación de Pickle , puedes proporcionar un método llamado __getstate__()
, que devuelve algo que representa el estado que quieres que sea decapado (si no se proporciona, pickle
usa thing.__dict__
). Entonces, puedes hacer algo como esto:
class Thing: def __getstate__(self): state = dict(self.__dict__) del state['cachedBar'] return state
Esto no tiene que ser un dict, pero si es otra cosa, también debe implementar __setstate__(state)
.
Implementar __getstate__
para devolver solo las partes de un objeto a ser decapado