У меня возник вопрос о работе декоратора. Я хотел бы объяснить мою проблему с помощью примераРабота декоратора
Код я реализовал понять декораторы
import sys
import inspect
def entryExit(f):
def new_f(self,*args, **kwargs):
print "Entering", f.__name__,self.__class__.__name__,inspect.getargspec(f).args[1:]
f(self,*args)
print "Exited", f.__name__,self.__class__.__name__,inspect.getargspec(f).args[1:]
return new_f
class A:
@entryExit
def move(self,g,h):
print "hello"
print g,h
@entryExit
def move1(self,m,n):
print "hello"
print m,n
return m
a=A()
a.move(5,7)
h=a.move1(3,4)
print h
Выходной сигнал этого кода
Entering move A ['g', 'h']
hello
5 7
Exited move A ['g', 'h']
Entering move1 A ['m', 'n']
hello
3 4
Exited move1 A ['m', 'n']
None
Последняя строка выходных дисплеев None
. Но фактический смысл метода изменяется с помощью декораторов. Оператор return в методе move1
не был выполнен. На самом деле выход я должен был бы быть
Entering move A ['g', 'h']
hello
5 7
Exited move A ['g', 'h']
Entering move1 A ['m', 'n']
hello
3 4
Exited move1 A ['m', 'n']
3
Так я сделал какую-либо ошибку при создании декоратора или декораторы всегда игнорирует заявление возвращения в функции?
Декораторы - это просто функции *, поэтому вам нужно лечить его, как и любой другой вызов цепочки функций. –