def override(base=ABSENT):
    arg = base
    if inspect.isfunction(arg) or isinstance(arg, NonInstanceMethod):
        _OverrideDecorator.maybe_signal_classmethod(arg)
        decorator = _OverrideDecorator(None)
        return decorator(arg)
    if arg is ABSENT:
        return _OverrideDecorator(None)
    if is_class(arg) or is_string(arg):
        return _OverrideDecorator(arg)
    raise TypeError("explicit base class for @override "
                    "must be either a string or a class object")