Usando o mesmo decorador (com argumentos) com funções e métodos

Eu tenho tentado criar um decorador que pode ser usado com funções e métodos em python. Isso por si só não é tão difícil, mas ao criar um decorador que aceita argumentos, parece ser.

class methods(object):
    def __init__(self, *_methods):
        self.methods = _methods

    def __call__(self, func): 
        def inner(request, *args, **kwargs):
            print request
            return func(request, *args, **kwargs)
        return inner

    def __get__(self, obj, type=None):
        if obj is None:
            return self
        new_func = self.func.__get__(obj, type)
        return self.__class__(new_func)

O código acima envolve a função / método corretamente, mas no caso de um método, orequest argumento é a instância em que está operando, não o primeiro argumento não-próprio.

Existe uma maneira de saber se o decorador está sendo aplicado a uma função em vez de um método e lidar de acordo?

questionAnswers(5)

yourAnswerToTheQuestion