Выбрать все атрибуты, кроме одного

Как лучше всего написать метод __ 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 }

Это не очень масштабируемый или обслуживаемый объект, если у меня есть объект со многими атрибутами или который часто изменяется.

Единственная альтернатива, о которой я могу думать, - это некоторая вспомогательная функция, которая выполняет итерацию по свойствам объекта и добавляет их (или нет) в словарь в зависимости от типа.

27
задан Ciro Santilli 新疆改造中心法轮功六四事件 19 January 2017 в 22:36
поделиться