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