Usando el mismo decorador (con argumentos) con funciones y métodos.

He estado tratando de crear un decorador que se pueda usar con ambas funciones y métodos en python. Esto por sí solo no es tan difícil, pero cuando se crea un decorador que toma argumentos, parece serlo.

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)

El código anterior envuelve la función / método correctamente, pero en el caso de un método, elrequest argumento es la instancia en la que está operando, no el primer argumento no propio.

¿Hay alguna manera de saber si el decorador se está aplicando a una función en lugar de un método, y tratar en consecuencia?

Respuestas a la pregunta(5)

Su respuesta a la pregunta