Python覚え書き >

Pythonのデコレータ

メソッドを単純にラップするだけの場合

simple_decorator.py

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!')

結果

python3 simple_decorator.py
before!
simple decorator!
after!

引数があるデコレータ

args_decorator.py

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!')

結果

python3 args_decorator.py

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

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-01-10 (木) 11:58:14 (192d)