了解如何在Python中使用以@property装饰的私有变量

时间:2018-09-13 17:18:12

标签: python properties

下面是我的代码段

class TestClass:
    def __init__(self,n1,n2):
        self.n1 = n1
        self.n2 = n2
        self._sum = None # WILL BE COMPUTED LATER ON

    @property
    def sum(self):
        if self._sum is None:
           self._sum = self.compute_sum()
        return self._sum

    def compute_sum(self):
        return(self.n1+self.n2)

test_obj = TestClass(5,6)

print(test_obj.sum)

这只是一个示例程序,说明了我所面临的问题。 我有一个带有私有变量_sum的类,在其中我想保存两个数字n1和n2的值。

属性sum可以由外部世界使用(可以这样说)来访问和值,而无需修改其值。我有一个私有变量_sum的原因是,该值只计算一次并存储起来,以便以后进行提取。

只有@property会在每次有人尝试通过实例访问sum的值时计算该值,而我想避免这种情况 对性能的影响(请记住,这只是一个示例,用于说明我面临的实际问题)

鉴于我的要求是能够对所有要使用的外部对象求和,但同时又不希望每次调用都对它进行计算,这是我的实现吗?设计明智吗?

有趣的是,甚至在调用函数之前就已计算_sum的值,至少我的IDE能够做到这一点,不确定如何做到。

在下面的屏幕快照中,我们位于第9行,尚未调用compute_sum(),但该值已被计算。怎么来的 ?

enter image description here

0 个答案:

没有答案