code: def strategy(self, *names, **kwargs):
      def decorator(func):
        keep_name = kwargs.pop("keep_name", False)
        if kwargs:
          key = next(iter(kwargs))
          raise TypeError("Unknown keyword argument '{}'".format(key))
        if not keep_name:
          func.__name__ = str(names[0])
        self[names] = func
        return self
      return decorator