Я хотел бы постараться не солить определенных полей в экземпляре класса. В настоящее время прежде, чем засолить я просто установил те поля ни на Один, но интересно, существует ли более изящное решение?
В документации есть пример , который решает вашу проблему с __ getstate __
и __ setstate __
].
Одним из способов обработки атрибутов экземпляра, которые не являются выбираемыми объектами, является использование специальных методов, доступных для изменения состояния экземпляра класса: 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 () мы можем воссоздать файловый объект на основе выбранной нами информации об имени и позиции и назначить файловый объект атрибуту файла журнала экземпляра.
Ссылка: http://www.ibm.com/developerworks/library/l-pypers.html