by shigemk2

当面は技術的なことしか書かない

デコレータ

Python - デコレータ

関数に付加機能をつけるということ

Rubyのアラウンドエイリアスに似ているけど、実際どうなのだろう。

ほぼまるこぴ。
Python のデコレータ式 (1) | すぐに忘れる脳みそのためのメモ

# -*- coding: utf-8 -*-
# 関数Dに関数hogeを突っ込み、疑似デコレータとする
def D(f):
    print u"デコレータが実行された1"
    return f

def hoge():
    print "hoge1"

hoge = D(hoge)
hoge()
# デコレータが実行された1
# hoge1

def D(f):
    print u"デコレータが実行された2"
    return f

# デコレータを適用したときに、関数 D が適用される。
@D
def hoge():
    print "hoge2"

hoge()
# デコレータが実行された2
# hoge2

def D(f):
    def _():
        print "*__" * 10
        f()
        print "*__" * 10
    return _

def hoge():
    print "hoge1"

# デコレータ関数 D を適用する前
print "before decoration: 1"
hoge()
# デコレータ関数 D を関数 hoge に適用
hoge = D(hoge)
# デコレータ関数 D を関数 hoge に適用した後
print "after decoration: 1"
hoge()
# before decoration: 1
# hoge1
# after decoration: 1
# *__*__*__*__*__*__*__*__*__*__
# hoge1
# *__*__*__*__*__*__*__*__*__*__

def D(f):
    def _():
        print "*--" * 10
        f()
        print "--*" * 10
    return _
@D
def hoge():
    print "hoge2"
hoge()
@D
def piyo():
    print "piyo1"

piyo()
# *--*--*--*--*--*--*--*--*--*--
# hoge2
# --*--*--*--*--*--*--*--*--*--*
# *--*--*--*--*--*--*--*--*--*--
# piyo1
# --*--*--*--*--*--*--*--*--*--*
def fuga(func):
    print 'fuga'
    return func

def bar():
    print 'bar'
bar() # bar
@fuga
def bar():
    print 'bar'

bar()
# fuga
# bar

最後のところは下を参考にしました