lazyproperty#
- class astropy.utils.decorators.lazyproperty(fget, fset=None, fdel=None, doc=None)[source]#
Bases:
property
Works similarly to property(), but computes the value only once.
This essentially memorizes the value of the property by storing the result of its computation in the
__dict__
of the object instance. This is useful for computing the value of some property that should otherwise be invariant. For example:>>> 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
As the example shows, the second time
complicated_property
is accessed, theprint
statement is not executed. Only the return value from the first access offcomplicated_property
is returned.By default, a setter and deleter are used which simply overwrite and delete, respectively, the value stored in
__dict__
. Any user-specified setter or deleter is executed before executing these default actions. The one exception is that the default setter is not run if the user setter already sets the new value in__dict__
and returns that value and the returned value is notNone
.