Je souhaite créer et réutiliser un décorateur (avec étiquette) qui effectue un pré / post-traitement de la fonction comme indiqué ci-dessous.
>>> @MyDecorator('any-tag')
... def foo():
... print u'foo'
...
>>> foo():
pre-action. tag=any-tag.
foo
post-action. tag=any-tag.
Faites comme ça.
class MyDecorator(object):
def __init__(self, tag):
self._tag = tag
def __call__(self, f0):
def decorated(*args, **kwargs):
print u'pre-action. tag=' + self._tag
ret = f0(*args, **kwargs)
print u'post-action. tag=' + self._tag
return ret
return decorated
Version utilisant functools.wraps.
Merci @termoshtt (^ ◇ ^)
from functools import wraps
def MyDecorator(tag):
def dec(f0):
@wraps(f0)
def decorated(*args, **kwargs):
print u'pre-action. tag=' + tag
ret = f0(*args, **kwargs)
print u'post-action. tag=' + tag
return ret
return decorated
return dec
Recommended Posts