def METHOD_NAME(self, exit):
    """Registers a callback with the standard __exit__ method signature
    Can suppress exceptions the same way __exit__ methods can.
    Also accepts any object with an __exit__ method (registering a call
    to the method instead of the object itself)
    """
    # We use an unbound method rather than a bound method to follow
    # the standard lookup behaviour for special methods
    _cb_type = type(exit)
    try:
        exit_method = _cb_type.__exit__
    except AttributeError:
        # Not a context manager, so assume its a callable
        self._exit_callbacks.append(exit)
    else:
        self._push_cm_exit(exit, exit_method)
    return exit # Allow use as a decorator