我可以将变量标记为瞬态,这样它们就不会被腌制吗?

发布于 2024-11-15 02:15:51 字数 429 浏览 2 评论 0原文

假设我有一堂课:

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标记为易失性/瞬态/不可picklable吗?

Let's say I have a class:

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.

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

Can I mark cachedBar as volatile / transient / not picklable?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

删除→记忆 2024-11-22 02:15:51

根据 Pickle 文档,您可以提供一个名为 __getstate__() 的方法,它返回代表您想要腌制的状态的内容(如果未提供,pickle 使用 thing.__dict__)。所以,你可以这样做:

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

这不一定是一个字典,但如果它是其他东西,你还需要实现__setstate__(state)

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

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

但可醉心 2024-11-22 02:15:51

实现 __getstate__ 仅返回以下部分要腌制的对象

Implement __getstate__ to return only what parts of an object to be pickled

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文