Форум сайта python.su
Как в декораторе определить что он декарирует, функцию или метод? Ведь в него всегда передаеться чистая функция, и только потом, она обертывается дексриптором, вариант со сравнением имени первого параметра с self не предлагать :)
Офлайн
Может через type() можно?
>>> class A(object):
def __init__(self):
pass
def method(self):
pass
>>> def func():
pass
>>> a = A()
>>> m = a.method
>>> f = func
>>> type(m)
<type ‘instancemethod’>
>>> type(f)
<type ‘function’>
Офлайн
Cleric
Никак. Что-то я не соображу, когда это бывает нужно - и при том вариант с двумя декораторами - для свободной функции и для метода - не является лучшим.
lukke
Вы не правы. method descriptor применяется после декорирования, так что никакой разницы не будет видно. Если смотреть из декоратора, то везде - <type ‘function’>
Офлайн
Точно, это даже в условии написано: “Ведь в него всегда передается чистая функция”
Нельзя угадывать ответ в задаче, условие которой толком не прочитал :/
Отредактировано (Ноя. 5, 2007 18:00:23)
Офлайн
Андрей СветловКак раз для обобщения друх декораторов мне это и нужно, дело в том что декоратор должен знать количество аргументов декарируемой функции, для методов self не должен учитываться.
Что-то я не соображу, когда это бывает нужно - и при том вариант с двумя декораторами - для свободной функции и для метода - не является лучшим.
Офлайн