Один из способов обработки атрибутов экземпляра, которые не являются объектами для выбора, состоит в использовании специальных методов, доступных для изменения состояния экземпляра класса: getstate () и setstate (). Вот пример
class Foo(object):
def __init__(self, value, filename):
self.value = value
self.logfile = file(filename, 'w')
def __getstate__(self):
"""Return state values to be pickled."""
f = self.logfile
return (self.value, f.name, f.tell())
def __setstate__(self, state):
"""Restore state from the unpickled state values."""
self.value, name, position = state
f = file(name, 'w')
f.seek(position)
self.logfile = f
Когда экземпляр Foo выбирается, Python выбирает только те значения, которые ему возвращаются, когда он вызывает метод экземпляра getstate (). Точно так же, во время расщепления, Python предоставит несортированные значения в качестве аргумента для метода setstate () экземпляра. Внутри метода setstate () мы можем воссоздать файловый объект на основе выбранной нами информации об имени и позиции и назначить объект файла атрибуту logfile экземпляра.
Ссылка: http://www.ibm.com/developerworks/library/l-pypers.html