Pickle除on之外的所有属性

2024-10-02 00:33:05 发布

您现在位置:Python中文网/ 问答频道 /正文

编写一个__getstate__方法的最佳方法是什么,该方法可以pickle几乎一个对象的所有属性,但排除一些属性?

我有一个具有许多属性的对象,包括一个引用instancemethod的对象。instancemethod不可pickle,因此尝试pickle此对象时出错:

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 }

如果我有一个具有许多属性或经常更改的对象,那么这就不是很可伸缩或可维护的。

我能想到的唯一选择是某种helper函数,它遍历对象的属性,并根据类型将它们添加(或不添加)到字典中。


Tags: 对象方法self属性objectfooinitmy

热门问题