Pythonic方法将方法结果存储为属性

Den*_*eev 5 python oop class

我有一个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这里使用正确吗?

谢谢.

hek*_*mgl 1

基本上看起来不错。但由于xy是可变的,因此您需要使和无效以防_result万一会被修改。xy

我也会使用x和来制作属性y,一旦它们被设置为 invalidate _result

一件事,因为xy是对的引用lists(我猜你的意思是说时arrays),这些列表可能会从 的范围之外进行修改MyClass。如果发生这种情况,按照我使用属性的建议,即使和是属性,MyClass也将无法检测到该更改。我会接受这个限制,但会很好地记录它。xy