パラメータを取るデコレータ
2通り書いてみました。
def showMessage(msg):
def decorator(func):
def foo(*args, **kw):
print msg
func(*args, **kw)
return foo
return decorator
@showMessage("Hello")
def foo():
pass
foo()
# 以下は誤り
#class ShowMessage(object):
# def __init__(self, msg):
# self.msg
# def __call__(self, func):
# def foo(*args, **kw):
# print msg
# func(*args, **kw)
#
# return foo
#
#@showMessage("Hello") # ←間違えて小文字にしたせいで1つめの定義を使って動いてしまった
def foo():
pass
foo()
フィードバック
動かないっすよ。 こうでは?
class ShowMessage(object): def __init__(self, msg): self.msg = msg def __call__(self, func): def wrap(*args, **kwds): print self.msg func(*args, **kwds) return wrap @ShowMessage("Hello") def foo(): pass foo()