懒散#
- 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.