Python | デコレータの使い方
公開日:2021/5/29
Pythonでは,関数の前にアットマーク(@)をつけることによって別の関数を返すことができる.この処理をデコレータと呼ぶ.以下にデコレータを用いた構文を作成する.
◆実施環境
Python 3.8.8
■デコレータの記述方法
デコレータの基本的な記述方法を以下に記載
def 関数1(): # デコレータの関数
def wrapper(*args, **kwargs):
print() # 関数1の処理1
func(*args, **kwargs)
print() # 関数1の処理2
return wrapper
@関数1 # 1行目の関数名(関数1)を@の後ろに記載:デコレータの利用
def 関数2():
関数2の処理
関数2の実行
■デコレータを利用した基本構文
#1の処理:2行目でデコレータのための関数の定義をする.4~6行目で関数の処理を作成する.9行目に,定義した関数(my_dec)に@をつけ,デコレータ関数を利用する.10行目に関数を定義し,12行目の関数処理が5行目に利用される.14行目で実際に関数を実行する.
# 1の処理
def my_dec(func): # デコレータの関数の定義
def wrapper(*args,**kwargs):
print('Hi') # 関数の処理1
func(*args,**kwargs) # @以降の関数処理がここで出力される
print('Nice to see you') # 関数の処理2
return wrapper
@my_dec
def greeting(n):
print(f'This is {n}')
greeting(input('名前を入力してください'))
# 2の処理
def my_dec1(func):
def wrapper(*args,**kwargs):
print('$'*40)
func(*args,**kwargs)
print('$'*40)
return wrapper
def my_dec2(func):
def wrapper(*args,**kwargs):
print('+'*40)
func(*args,**kwargs)
print('+'*40)
return wrapper
@my_dec1
@my_dec2
def greeting(n):
print(f'Hello,{n}')
greeting(input('名前を入力してください'))
■実行結果
# 1の結果
名前を入力してくださいTaro # 'Taro'を入力
Hi # 以下が出力
This is Taro
Nice to see you
# 2の結果
名前を入力してくださいJiro # 'Jiro'を入力
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
++++++++++++++++++++++++++++++++++++++++
Hello,Jiro
++++++++++++++++++++++++++++++++++++++++
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
以上