misc.lazyproperty

misc.lazyproperty [edit on github]

Works similarly to property(), but computes the value only once.

This essentially memoizes 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

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

Page Contents