【发布时间】:2018-09-25 12:26:06
【问题描述】:
我有一个非常昂贵的方法,它返回 2 个值,它被 A 类调用。由于它很昂贵,我使用属性对 2 个值进行了惰性评估。由于我不想调用very_expensive_function 2 次,所以当用户第一次想要访问这两个值中的一个时,我将两者都保存了。
到目前为止,我写了这个:
class A:
def __init__(self):
self._attr1 = None
self._attr2 = None
@property
def attr1(self):
self.calculate_metrics()
return self._attr1
@property
def attr2(self):
self.calculate_metrics()
return self._attr2
def calculate_metrics():
if self._attr1 is None:
attr1, attr2 = very_expensive_call()
self._attr1 = attr1
self._attr2 = attr2
如您所见,用户第一次访问attr1 或attr2,我都保存了。它是正确的还是可能以其他方式?每次都复制粘贴calculate_metrics() 似乎很奇怪。
【问题讨论】:
-
据我所知,这是这样做的方法。
-
有没有参数传递给
very_expensive_call?如果有,您也许可以使用 memoization。 -
感谢您的回答!是的,有参数,“我可以使用记忆”是什么意思?
-
我会添加一个答案。
标签: python python-3.x properties