我有一个python类,其属性可以对大型数组执行操作.在第一次计算方法结果后存储方法结果的最佳方法是什么,而不是每次访问属性时都不重做操作?
例如:
class MyClass:
def __init__(self, x, y):
"""Input variables are two large data arrays"""
self.x = x
self.y = y
@property
def calculate(self):
"""Some computationally expensive operation"""
try:
# the result has been calculated already
return self._result
except AttributeError:
# if not, calculate it
self._result = self.x * self.y
return self._result
Run Code Online (Sandbox Code Playgroud)
用法:
>>> foo = MyClass(2,3)
>>> a = foo.calculate
>>> print(a)
6
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,到目前为止我提出的所有内容都是存储结果的"隐藏"属性.有一个更好的方法吗?@property这里使用正确吗?
谢谢.
基本上看起来不错。但由于x和y是可变的,因此您需要使和无效以防_result万一会被修改。xy
我也会使用x和来制作属性y,一旦它们被设置为 invalidate _result。
一件事,因为x和y是对的引用lists(我猜你的意思是说时arrays),这些列表可能会从 的范围之外进行修改MyClass。如果发生这种情况,按照我使用属性的建议,即使和是属性,MyClass也将无法检测到该更改。我会接受这个限制,但会很好地记录它。xy