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