Короткий ответ : Нет.
Более длинный ответ : Вы можете сделать это, взломав трассировку стека (см. Модуль inspect
), но этоне очень хорошая идея.
Полный ответ : В то время, когда функция оформляется, она все еще не связана.Попробуйте следующее:
def my_dec(fn):
print dir(fn) # Has "func_code" and "func_name"
return fn
class A(object):
@my_dec
def test(self):
pass
print dir(A.test) # Has "im_class" and "im_self"
Вы можете видеть, что необработанная функция передается декоратору, а связанная функция доступна после объявления класса.
Способ сделать этопросто для декоратора функции в сочетании с метаклассом или декоратором класса .В любом случае декоратор функции может установить флаг для функции, а метакласс или декоратор класса может найти его и сделать соответствующую вещь.