我可以将变量标记为临时变量,以免被腌制吗?

发布于 2021-01-29 15:23:10

假设我有一堂课:

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

为了进行一些密集的计算,因此我将其缓存在内存中以加快处理速度。

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

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

关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

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

    这不一定是一个命令,但是如果还有其他要求,则还需要实现__setstate__(state)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看