Как лучше всего написать метод __ getstate __
, который обрабатывает почти все атрибуты объекта, но исключает некоторые?
У меня есть объект со многими свойствами, в том числе со ссылкой на метод экземпляра. instancemethod не допускает маринования, поэтому я получаю сообщение об ошибке, когда пытаюсь обработать этот объект:
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
Этот метод __ getstate __
исправляет это, но затем мне нужно вручную включить все свойства, которые я хочу сериализовать:
def __getstate__(self):
return { 'a': self.a, 'b': self.b, 'c': self.c }
Это не очень масштабируемый или обслуживаемый объект, если у меня есть объект со многими атрибутами или который часто изменяется.
Единственная альтернатива, о которой я могу думать, - это некоторая вспомогательная функция, которая выполняет итерацию по свойствам объекта и добавляет их (или нет) в словарь в зависимости от типа.