- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2019-01-10T02:00:19+00:00","","")
[[Python覚え書き]] >l;
[[Python覚え書き]] >
* Pythonのデコレータ [#we76f02d]
#setlinebreak(on);
#contrents
#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>)