Форум сайта python.su
![[RSS Feed] [RSS Feed]](/static/djangobb_forum/img/feed-icon-small.png) 
			 
							 0
  0   
								
								Как в декораторе определить что он декарирует, функцию или метод? Ведь в него всегда передаеться чистая функция, и только потом, она обертывается дексриптором, вариант со сравнением имени первого параметра с self не предлагать :)
Офлайн
 
							 0
  0   
								
								Может через 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’>
Офлайн
 
							 14
  14   
								
								Cleric
Никак. Что-то я не соображу, когда это бывает нужно - и при том вариант с двумя декораторами - для свободной функции и для метода - не является лучшим.
lukke
Вы не правы. method descriptor применяется после декорирования, так что никакой разницы не будет видно. Если смотреть из декоратора, то везде - <type ‘function’>
Офлайн
 
							 0
  0   
								
								Точно, это даже в условии написано: “Ведь в него всегда передается чистая функция”
Нельзя угадывать ответ в задаче, условие которой толком не прочитал :/
Отредактировано (Ноя. 5, 2007 18:00:23)
Офлайн
 
							 0
  0   
								
								Андрей СветловКак раз для обобщения друх декораторов мне это и нужно, дело в том что декоратор должен знать количество аргументов декарируемой функции, для методов self не должен учитываться.
Что-то я не соображу, когда это бывает нужно - и при том вариант с двумя декораторами - для свободной функции и для метода - не является лучшим.
Офлайн
![[RSS Feed] [RSS Feed]](/static/djangobb_forum/img/feed-icon-small.png)