[[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>)