code: def lazy_property(function: Callable) -> Any:
      """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.
      """
      attr_name = "_lazy_" + function.__name__
  
      def _lazyprop(self: Any) -> Any:
          if not hasattr(self, attr_name):
              setattr(self, attr_name, function(self))
          return getattr(self, attr_name)
  
      return property(_lazyprop)
  
imports: import asyncio
  import functools
  import importlib
  import inspect
  import logging
  from typing import Text, Dict, Optional, Any, List, Callable, Collection, Type
  from rasa.shared.exceptions import RasaException
label_desc: Use image node_id 5 for calling a global function with example usage: lazy_property(function) and returns: property, getattr