如何在Python中记下属性?

2024-09-27 21:31:29 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑以下最小的例子:

class Foo(object):

    def __init__(self):
        self.b = self.a = 1

    @property
    def sum(self):
        print 'Recalculating sum'
        return self.a + self.b

foo = Foo()
print foo.sum
print foo.sum   # Prints 'Recalculating sum' even though neither a or b has changed since previous call
foo.a = 2
print foo.sum   # a has been changed to 2 so recalculation is necessary

我想记住sum,这样如果self.a和{}没有改变,那么我们就不需要继续重新计算属性了。在

只有在self.a或{}发生更改时才应重新计算该属性——有没有一种简单的方法可以做到这一点?在


Tags: self属性objectfooinitdefpropertyclass
1条回答
网友
1楼 · 发布于 2024-09-27 21:31:29

也可以使用ab的属性,并在setter中清除缓存:

class Foo(object):

    def __init__(self):
        self.a = 1
        self.b = 1

    @property
    def a(self):
        return self._a

    @a.setter
    def a(self, value):
        self._a = value
        self._clearsum()

     @property
    def b(self):
        return self._b

    @b.setter
    def b(self, value):
        self._b = value
        self._clearsum()

    def _clearsum(self):
        self._sum = None

    @property
    def sum(self):
        if self._sum is None:
            self._sum = self.a + self.b
        return self._sum

或者,如果你想要更普通的东西,你也可以检查一下: Storing calculated values in an object

编辑:最近有人建议在__init__中添加self._sum = None,以“避免访问sum时出错”,但这实际上不是必需的-__init__调用{},它调用{},它设置了_sum属性,因此它被保证{}将被创建。在

相关问题 更多 >

    热门问题