human
Complete this python program:
def lazyproperty(f):
assistant
#Here is the Python program you requested.

    """@lazyprop decorator. Decorated method will be called only on first access
    to calculate a cached property value. After that, the cached value is
    returned.
    """
    cache_attr_name = (u'_%s' % f.__name__)
    docstring = f.__doc__
    def get_prop_value(obj):
        try:
            return getattr(obj, cache_attr_name)
        except AttributeError:
            value = f(obj)
            setattr(obj, cache_attr_name, value)
            return value
    return property(get_prop_value, doc=docstring)