[僕] 引数付きの decorator

僕ト云フ事

たろマークはてなブックマーク

2011年12月27日

[decorator][python] 引数付きの decorator

三重に関数をネストした decoration 用の関数を作る。


def deco(deco_arg):
    def deco_inner(func):
        def wrapper(*args, **kwards):
            print "before wrapper: %s" % deco_arg
            result = func(*args, **kwards)
            print "after wrapper: %s" % deco_arg
            return result
        return wrapper
    return deco_inner

んで、こうやると引数使って decorate できる。


@deco("boke")
def hoge(arg):
    print "hoge: %s" % arg
 
hoge("aaa")

実行結果

before wrapper: boke
hoge: aaa
after wrapper: boke

実際にはこうやってるのと一緒。


def boo(arg):
    print "boo: %s" % arg
 
_deco = deco("bbb")
b = _deco(boo)
b("aaa")

実行結果

before wrapper: bbb
boo: aaa
after wrapper: bbb
blog comments powered by Disqus