[ create a new paste ] login | about

Link: http://codepad.org/HVjuRZMS    [ raw code | output | fork ]

Python, pasted on Dec 9:
# -*- 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


Output:
1
2
3
Hallo World.hoge
<function bar at 0x403541ec>
bar


Create a new paste based on this one


Comments: