对象中的Python缓存
我已经创建了一个名为“Frame”的对象对象中的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(),成本很高。我希望将结果缓存在实例中,以便后续调用不必重新计算。最干净的方法是什么?金字塔使用: 文档字符串本身就说明了问题。=) 这
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