docs: def _create_getter(self, func, *targets):
          """
          Returns a function wrapping the supplied function. The returned wrapper can be used as the
          getter in a property definition. Raises a RuntimeError if the signature of the supplied
          function is not compatible with the getter-concept (no arguments except self).
  
          :param func: Callable or name of method on one object in targets.
          :param targets: List of targets with decreasing priority for finding func.
          :return: Getter function for constructing a wrapper-property.
          """
          if not func:
              return None
  
          final_callable = self._get_callable(func, *targets)
  
          if not self._function_has_n_args(final_callable, 0):
              raise RuntimeError(
                  'The function \'{}\' does not look like a getter function. A valid getter '
                  'function has no arguments that do not have a default. The self-argument of '
                  'methods does not count towards that number.'.format(final_callable.__name__))
  
          @wraps(final_callable)
          def getter(obj):
              return final_callable()
  
          return getter