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?
According 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,pickleusesthing.__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).