__getstate__ 与 __setstate__的作用

来源:互联网 发布:c语言教案 谭浩强 编辑:程序博客网 时间:2024/05/17 00:09

        一些对象类型(譬如,文件对象)不能进行 pickle。处理这种不能 pickle 的对象的实例属性时可以使用特殊的方法( _getstate_() 和 _setstate_() )来修改类实例的状态。这里有一个 Foo 类的示例,我们已经对它进行了修改以处理文件对象属性:

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  
        pickle Foo 的实例时,Python 将只 pickle 当它调用该实例的 _getstate_() 方法时返回给它的值。类似的,在 unpickle 时,Python 将提供经过 unpickle 的值作为参数传递给实例的 _setstate_() 方法。在 _setstate_() 方法内,可以根据经过 pickle 的名称和位置信息来重建文件对象,并将该文件对象分配给这个实例的 logfile 属性。


转自:http://www.cnblogs.com/cobbliu/archive/2012/09/04/2670178.html