Я приму предположение:
Код можно разбить на 2 этапа:
func = getattr(a, "_decorated_function", a)
print func.__name__
Игнорировать первую строку.
Во второй строке выводится имя func
, которое в вашем случае будет 'a'
. Не удивительно.
Первая строка для случая декораторов:
class My_decorator:
def __init__(self,func):
self._decorated_function = func
def __call__(self,arg):
self._decorated_function(arg+1)
@My_decorator
def a(i):
print i
print a(0)
>>> 1
print a._decorated_function.__name__
>>> a
Таким образом, объекты, которые вы будете вызывать getattr(a, "_decorated_function", a)
, должны быть либо функциями, либо классами, которые «украшали» функцию.