# -*- coding: utf-8 -*-
from functools import wraps
# デコレータ
def require_foo(foo_type):
def decorator(func):
# func はこの場合 bar (関数オブジェクト)
# bar の前にフックする関数をラップしてそれを返すことができる
@wraps(func)
def inner(request, *args, **kwargs):
# このデコレータに修飾された関数はこのinnerにラップされる
request += foo_type # 適当だが
return func(request, *args, **kwargs)
return inner
return decorator
@require_foo('hoge')
def bar(request):
# Django のviewと思ってね
return request
if __name__ == '__main__':
request = 'Hallo World.'
print bar(request) # bar は innerである
print bar
print bar.func_name