私は大きな配列に対して操作を実行するプロパティを持つpythonクラスを持っています。プロパティにアクセスするたびに操作をやり直すことなく、最初に計算された後のメソッドの結果を保存する最善の方法は何ですか?例えばメソッドの結果を属性として格納する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
は使用方法:
>>> foo = MyClass(2,3)
>>> a = foo.calculate
>>> print(a)
6
あなたが見ることができるように、私がこれまでに思い付いたすべての結果が保存されている「隠し」属性を持つことです。これを行うより良い方法はありますか? @property
の使用はここで正しいですか?
ありがとうございました。
について 'self._result = NONE'でオブジェクトを初期化し、次にあなたが最初self._result' 'かどうかを確認calculate'でどのようにhttps://github.com/pydanny/cached-property –
をチェック'はすでに新しい値を計算する前に値を持っていますか? – TigerhawkT3
私は個人的に '@ property'を使用しません。論理的には、"計算する "というものが動作する関数であると期待しているからです。 – Paul