修飾器通常返回一個包裝函數;只需在調用包裝函數後將你的邏輯放入包裝函數中即可。
def audit_action(action):
def decorator_func(func):
def wrapper_func(*args, **kwargs):
# Invoke the wrapped function first
retval = func(*args, **kwargs)
# Now do something here with retval and/or action
print 'In wrapper_func, handling action {!r} after wrapped function returned {!r}'.format(action, retval)
return retval
return wrapper_func
return decorator_func
所以audit_action(action='did something')
是一個裝飾工廠,返回一個作用域decorator_func
,這是用來裝飾你的do_something
(do_something = decorator_func(do_something)
)。
裝修後,您的do_something
參考文獻已被wrapper_func
替代。調用wrapper_func()
會導致原來的do_something()
被調用,然後你的代碼在包裝器func可以做的事情。
上面的代碼,再加上你的榜樣作用,給出了以下的輸出:
>>> do_something('foo')
In wrapper_func, handling action 'did something' after wrapped function returned 'bar'
'bar'
你不知道有多少個不同的組合裝飾,包裝,功能和retvals我用盡了這個工作。不僅感謝代碼,而且感謝您的解釋。 –