对象中的Python缓存

对象中的Python缓存,python,Python,我已经创建了一个名为“Frame”的对象 class Frame: def __init__(self, image): self.image = image def gray(self): return cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY) 有些操作,例如gray(),成本很高。我希望将结果缓存在实例中,以便后续调用不必重新计算。最干净的方法是什么?金字塔使用: 文档字符串本身就说明了问题。=) 这

我已经创建了一个名为“Frame”的对象

class Frame:
    def __init__(self, image):
      self.image = image

    def gray(self):
      return cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
有些操作,例如gray(),成本很高。我希望将结果缓存在实例中,以便后续调用不必重新计算。最干净的方法是什么?

金字塔使用:


文档字符串本身就说明了问题。=)

这不能简单地在实例化时完成吗

class Frame:
    def __init__(self, image):
        self.image = image
        self.gray = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
编辑-似乎是一个好时机的财产

class Frame(object):
    def __init__(self, image):
        self.image = image
        self._grey = None

    @property
    def grey(self):
        if self._grey is None:
            self._grey = solve_for_grey(self.image, stuff)
        return self._grey

解决这类问题的最佳方法是使用类似于memoize函数的简单装饰器解决方案,可以在这里找到:()

因为它很昂贵。。。可能不需要。方法声明如何成为成员很有趣。我会发现,这完全违反直觉。@njzk2:好吧,它的目的是像
@property
一样。如果值发生变化怎么办?它们会被改变吗?@Stick:那么它们一般不应该被缓存……好吧,这就是我的意思。我只是不想假设在图像放入对象后没有对其进行任何处理,但如果这是一个安全的假设,那么这确实是一个整洁的
self
将是dict键,请确保以反映
self.image
中更改的方式实现
\uuuhash
。另一方面,如果有什么东西操纵了它,结果就会过时。
class Frame(object):
    def __init__(self, image):
        self.image = image
        self._grey = None

    @property
    def grey(self):
        if self._grey is None:
            self._grey = solve_for_grey(self.image, stuff)
        return self._grey