What is the best way to write a __getstate__ method that pickles almost all of an object's attributes, but excludes a few?
I have an object with many properties, including one that references an instancemethod. instancemethod's are not pickleable, so I'm getting an error when I try to pickle this object:
class Foo(object):
def __init__(self):
self.a = 'spam'
self.b = 'eggs'
self.c = 42
self.fn = self.my_func
def my_func(self):
print 'My hovercraft is full of eels'
import pickle
pickle.dumps(Foo()) # throws a "can't pickle instancemethod objects" TypeError
This __getstate__ method fixes this, but then I have to manually include all the properties I want to serialize:
def __getstate__(self):
return { 'a': self.a, 'b': self.b, 'c': self.c }
That's not very scalable or maintainable if I have an object with many attributes or that changes frequently.
The only alternative I can think of is some kind of helper function that iterates through an object's properties and adds them (or not) to the dictionary, based on the type.