Декоратор изменяет статус функции с метода на функцию

[Обновлено]: ответ на вопрос ниже

У меня есть программа проверки, и одна цель состоит в том, чтобы логика в декораторе знала, является ли функция, которую она украшает, методом класса или обычной функцией. Это терпит неудачу странным образом. Ниже приведен код, запускаемый в Python 2.6:

def decorate(f):
    print 'decorator thinks function is', f
    return f

class Test(object):
    @decorate
    def test_call(self):
        pass

if __name__ == '__main__':
    Test().test_call()
    print 'main thinks function is', Test().test_call

Затем на исполнение:

decorator thinks function is <function test_call at 0x10041cd70>
main thinks function is <bound method Test.test_call of <__main__.Test object at 0x100425a90>>

Любая подсказка о том, что идет не так, и если @decorate возможно правильно сделать вывод, что test_call является методом?

[Ответ] Карл ответ ниже почти идеально. У меня возникла проблема при использовании декоратора в методе, вызываемом подклассами. Я адаптировал его код, чтобы включить сравнение im_func для членов суперкласса:

ismethod = False
for item in inspect.getmro(type(args[0])):
    for x in inspect.getmembers(item):
        if 'im_func' in dir(x[1]):
            ismethod = x[1].im_func == newf
            if ismethod:
                break
    else:
        continue
    break

Ответы на вопрос(4)

Ваш ответ на вопрос