我可以将变量标记为临时变量,以免被腌制吗? [英] Can I mark variables as transient so they won't be pickled?

查看:72
本文介绍了我可以将变量标记为临时变量,以免被腌制吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

让我说一堂课

class Thing(object):
    cachedBar = None

    def __init__(self, foo):
        self.foo = foo

    def bar(self):
        if not self.cachedBar:
            self.cachedBar = doSomeIntenseCalculation()
        return self.cachedBar

要进行大量计算,所以我将其缓存在内存中以加快速度.

To get bar some intense calculation, so I cache it in memory to speed things up.

但是,当我腌制这些类之一时,我不想腌制cachedBar.

However, when I pickle one of these classes I don't want cachedBar to be pickled.

我可以将cachedBar标记为易失性/瞬态/不可腌吗?

推荐答案

根据 Pickle文档,您可以提供一种名为__getstate__()的方法,该方法返回代表您要腌制的状态的内容(如果未提供,则pickle使用thing.__dict__).因此,您可以执行以下操作:

According to the Pickle documentation, you can provide a method called __getstate__(), which returns something representing the state you want to have pickled (if it isn't provided, pickle uses thing.__dict__). So, you can do something like this:

class Thing:
      def __getstate__(self):
            state = dict(self.__dict__)
            del state['cachedBar']
            return state

这不一定要是字典,但是如果还有其他要求,则还需要实现__setstate__(state).

This doesn't have to be a dict, but if it is something else, you need to also implement __setstate__(state).

这篇关于我可以将变量标记为临时变量,以免被腌制吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆