[[Python覚え書き]] >
* Pythonのデコレータ [#we76f02d]
#setlinebreak(on);

#contents

** メソッドを単純にラップするだけの場合 [#cb7507fd]
#html(<div  style="padding-left:10px;">)

simple_decorator.py
#mycode2(){{
def mydecorator(f):
    def wrapper(*args, **kwargs):
        # 前処理
        print('before!')

        # 対象のメソッドを実行
        f(*args, **kwargs)

        # 後処理
        print('after!')
    return wrapper

@mydecorator
def func1(msg):
    print(msg)

if __name__ == '__main__':
    func1('simple decorator!')
}}

結果
#myterm2(){{
python3 simple_decorator.py
before!
simple decorator!
after!
}}
#html(</div>)

** 引数があるデコレータ [#y989a441]
#html(<div  style="padding-left:10px;">)

args_decorator.py
#mycode2(){{
def mydecorator(*deco_args, **deco_kwargs):
    def d_wrapper(f):
        def f_wrapper(*args, **kwargs):
            print(f'decorator args   : {deco_args}')
            print(f'decorator kwargs : {deco_kwargs}')
            print(f'function  args   : {args}')
            print(f'function  kwargs : {kwargs}')
            f(*args, **kwargs)
        return f_wrapper
    return d_wrapper

@mydecorator('arg1', 'arg2', opt1='abc')
def func1(msg):
    print(msg)

if __name__ == '__main__':
    func1('args decorator!')
}}

結果
#myterm2(){{
python3 args_decorator.py

python3 args_decorator.py
decorator args   : ('arg1', 'arg2')
decorator kwargs : {'opt1': 'abc'}
function  args   : ('args decorator!',)
function  kwargs : {}
args decorator!
}}


#html(</div>)


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS