Let's say I have a class:
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
To get bar some intense calculation, so I cache it in memory to speed things up.
However, when I pickle one of these classes I don't want cachedBar
to be pickled.
Can I mark cachedBar as volatile / transient / not picklable?
Implement
__getstate__
to return only what parts of an object to be pickledAccording to the Pickle documentation, you can provide a method called
__getstate__()
, which returns something representing the state you want to have pickled (if it isn't provided,pickle
usesthing.__dict__
). So, you can do something like this:This doesn't have to be a dict, but if it is something else, you need to also implement
__setstate__(state)
.