__getstate__ 与 __setstate__的作用

        一些对象类型(譬如,文件对象)不能进行 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值