Je voudrais faire un décorateur qui pourrait être utilisé avec ou sans paramètre: Quelque chose comme ceci:Comment construire un décorateur avec des paramètres optionnels?
class d(object):
def __init__(self,msg='my default message'):
self.msg = msg
def __call__(self,fn):
def newfn():
print self.msg
return fn()
return newfn
@d('This is working')
def hello():
print 'hello world !'
@d
def too_bad():
print 'does not work'
Dans mon code, seule l'utilisation du décorateur avec le paramètre travaille: Comment procéder aux les deux fonctionnant (avec et sans paramètre)?
Je suppose que cela fonctionne pour votre cas et le ferait pour des cas similaires. Mais que faire si l'argument du décorateur est en réalité un seul appelable? Comment feriez-vous la différence entre la fonction décorée et l'argument? – ksrini
@ksrini: Ignacio l'a signalé dans sa [réponse] (http://stackoverflow.com/a/3931654/355230) il y a des années. – martineau
Vous pouvez également contourner ce problème en utilisant des arguments de mots-clés (tels que '@trace (default = ...)'). – jtbandes