Subscribed unsubscribe Subscribe Subscribe

Python の デコレータ

用途
複数メソッドに共通の前処理と後処理を付加できる。
 

サンプル
① 以下は pre do, post do を前後に出力するデコレータ。

>>> def decorate(func):        # func を deco します。
...   def decorated_fun(*args, **kwargs):  # 以下は deco された func を定義します。
...     print("pre do")        # 前処理
...     func(*args, **kwargs)  # func の処理
...     print("post do")       # 後処理
...   return decorated_func    # deco された func を返します。
... 
>>> @decorate
>>> def func(a, b):
...   print(a + ", " + b + "!")
... 
>>> 
>>> # 以下と同義
>>> # func = decorate(func)
>>> 
>>> func("Hello", "world")
pre do
Hello, world!
post do

 

② デコレータに引数を渡す場合
param が True の時だけ deco するように変更します。

>>> def set(param):
...   def decorate(func):
...     def decorated_func(*args, **kwargs):
...       if param:
...         print("pre do")
...         func(*args, **kwargs)
...         print("post do")
...       else:
...         func()
...     return decorated_func
...   return decorate
... 
>>> 
>>> param = True
>>>
>>> @set(param)
>>> def func():
...   print("Hello, world!")
... 
>>> 
>>> # これは以下と同義
>>> # decorate = set(param) ... decorate に引数セットしてください。
>>> # decorated_func = decorate(func) ... func をデコしてください。
Remove all ads