我可以把变量标记为瞬态的吗?

2024-09-26 17:57:52 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一节课:

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

为了得到巴尔一些激烈的计算,所以我把它缓存在内存中以加快速度。在

但是,当我pickle其中一个类时,我不希望cachedBar被pickle。在

我可以将cachedBar标记为volatile/transient/not pickle吗?


Tags: selfnoneifobjectfooinitdefnot
2条回答

根据Pickle documentation,您可以提供一个名为__getstate__()的方法,该方法返回表示要进行pickle的状态的内容(如果没有提供,pickle将使用thing.__dict__)。所以,你可以这样做:

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

这不一定是dict,但是如果是其他东西,您还需要实现__setstate__(state)。在

实现^{}只返回对象中要pickle的部分

相关问题 更多 >

    热门问题