【发布时间】:2011-10-01 21:29:56
【问题描述】:
编写__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 }
如果我有一个具有许多属性或经常更改的对象,那么这不是非常可扩展或可维护的。
我能想到的唯一替代方法是某种辅助函数,它遍历对象的属性并根据类型将它们添加(或不添加)到字典中。
【问题讨论】:
-
+1 供气垫船参考(此外,这是一个有价值的问题;)