懒散#

class astropy.utils.decorators.lazyproperty(fget, fset=None, fdel=None, doc=None)[源代码]#

基类:property

工作方式与property()类似,但只计算一次该值。

这实际上是通过将属性的计算结果存储在 __dict__ 对象实例的。这对于计算某些本来应该是不变的属性的值非常有用。例如::

>>> class LazyTest:
...     @lazyproperty
...     def complicated_property(self):
...         print('Computing the value for complicated_property...')
...         return 42
...
>>> lt = LazyTest()
>>> lt.complicated_property
Computing the value for complicated_property...
42
>>> lt.complicated_property
42

如示例所示,第二次 complicated_property 被访问, print 语句未执行。只有第一次访问的返回值关闭 complicated_property 返回。

默认情况下,使用setter和deleter,它们分别重写和删除存储在 __dict__ . 在执行这些默认操作之前,将执行任何用户指定的setter或deleter。一个例外是,如果用户设置程序已在中设置新值,则默认设置程序不会运行 __dict__ 并返回该值,而返回的值不是 None .