def lazy_property(function: Callable) -> Any:
    'Allows to avoid recomputing a property over and over.\n\n    The result gets stored in a local var. Computation of the property\n    will happen once, on the first call of the property. All\n    succeeding calls will use the value stored in the private property.'
    attr_name = ('_lazy_' + function.__name__)

    @property
    def _lazyprop(self: Any) -> Any:
        if (not hasattr(self, attr_name)):
            setattr(self, attr_name, function(self))
        return getattr(self, attr_name)
    return _lazyprop
Allows to avoid recomputing a property over and over.

The result gets stored in a local var. Computation of the property
will happen once, on the first call of the property. All
succeeding calls will use the value stored in the private property.
def lazy_property(function: Callable) -> Any:
    'Allows to avoid recomputing a property over and over.\n\n    The result gets stored in a local var. Computation of the property\n    will happen once, on the first call of the property. All\n    succeeding calls will use the value stored in the private property.'
    attr_name = ('_lazy_' + function.__name__)

    @property
    def _lazyprop(self: Any) -> Any:
        if (not hasattr(self, attr_name)):
            setattr(self, attr_name, function(self))
        return getattr(self, attr_name)
    return _lazyprop