Python: может ли декоратор определить, определяется ли функция внутри класса?

Я пишу декоратор, и по разным раздражающим причинам [0] было бы целесообразно проверить, определяется ли функция, которую он оборачивает, автономной или как часть класса (и, кроме того, какие классы этот новый класс создает подклассами) ,

Например:

def my_decorator(f):
    defined_in_class = ??
    print "%r: %s" %(f, defined_in_class)

@my_decorator
def foo(): pass

class Bar(object):
    @my_decorator
    def bar(self): pass

Следует напечатать:

<function foo …>: False
<function bar …>: True

Также обратите внимание:

В момент применения декораторов функция все равно будет функцией, а не несвязанным методом, поэтому тестирование экземпляра / несвязанного метода (с использованиемtypeof или жеinspect) не будет работать.Пожалуйста, предлагайте только предложения, которые решаютэто проблема - я знаю, что есть много подобных способов достижения этой цели (например, с помощью декоратора классов), но я бы хотел, чтобы они произошли вукрашение время не позже

[0]: в частности, я пишу декоратор, который позволит легко проводить параметризованное тестирование сnose, Тем не мение,nose будемне запустить генераторы тестов на подклассахunittest.TestCaseпоэтому я хотел бы, чтобы мой декоратор мог определить, используется ли он внутри подклассаTestCase и потерпеть неудачу с соответствующей ошибкой. Очевидное решение - использованиеisinstance(self, TestCase) перед вызовом упакованной функции не работает, потому что упакованная функцияпотребности быть генератором, который не исполняетсявообще.

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

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