Skip to main content
`Ctrl`+`K`

# lazyproperty

class astropy.utils.decorators.lazyproperty(fget, fset=None, fdel=None, doc=None)

  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, the `print` statement is not executed. Only the return value from the first access off `complicated_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 not `None`.