astro py:docs

- Index
- Modules

### Navigation

- next »
- « previous |
- Astropy v1.1.1 »
- Astropy Core Package Utilities (`astropy.utils`) »
- lazyproperty

# 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(object):
      ...     @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.

  If a setter for this property is defined, it will still be possible to manually update the value of the property, if that capability is desired.

  Adapted from the recipe at http://code.activestate.com/recipes/363602-lazy-property-evaluation