Я пишу декоратор, и по разным досадным причинам [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]: в частности, я пишу декоратор, который упростит параметризованное тестирование с носом
. Однако нос
не будет не запускать генераторы тестов в подклассах unittest.TestCase
, поэтому я хотел бы, чтобы мой декоратор мог определить, используется ли он внутри подкласс TestCase
и завершится ошибкой с соответствующей ошибкой.Очевидное решение - использование isinstance (self, TestCase)
перед вызовом обернутой функции не работает, потому что обернутая функция требует, чтобы был генератором, который не запускается и вовсе .