code: def resettable_cached_property(func):
      
  
      def wrapper(self):
          if not hasattr(self, '_resettable_cached_properties'):
              self._resettable_cached_properties = {}
          if func.__name__ not in self._resettable_cached_properties:
              self._resettable_cached_properties[func.__name__] = func(self)
          return self._resettable_cached_properties[func.__name__]
  
      # Returns a property whose getter is the 'wrapper' function
      return property(wrapper)
docs: Decorator to add cached computed properties to an object.
      Similar to Django's `cached_property` decorator, except stores
      all the data under a single well-known key so that it can easily
      be blown away.