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)
перед вызовом упакованной функции не работает, потому что упакованная функцияпотребности быть генератором, который не исполняетсявообще.