PythonのDecorators(デコレータ)を使用する

スポンサーリンク

PythonのDecorators(デコレータ)について解説しています。

Decorators(デコレータ)を使用することで、他の関数またはクラスの動作をラップ(包み)することで、ラップされた関数の変更、拡張することができます。

■Python

今回は、Google Colaboratoryを用います。Google ColaboratoryのPythonのバージョンは、記事作成時点では「3.7.13」となっています。

■Decorators(デコレータ)を使用する

では、実際にDecorators(デコレータ)を使用してみます。

def check(func):#引数にfuncと入れ引数に関数名を渡す
	def inside(a,b):
		  if b == 0:
			  print("0は入力できません")
			  return
		  func(a,b)
	return inside

@check
def add(a,b):
	return print(a + b)

add(5,0)

今回はdef文を用いてaddという変数を定義し、変数の引数,パラメータとしてaとbを設定します。この関数を呼び出された時に実行する処理としてaとbを算術演算子”+(加算)”を用いて演算し、演算の結果をprint()で出力させるというものです。この関数をDecorators(デコレータ)を使用し、関数の変更、拡張を行います。行うために、def文でcheckという関数を定義し、変数の引数,パラメータとしてfuncと入れ関数を渡すように設定します。check()関数を呼び出すと、今度はdef文で定義されたinside()関数が呼び出されます。この関数が呼び出されるとif文でもしbが0に等しい(比較演算子”==”)場合に、日本語の文字列をprint()を出力させる。そしてreturnとしてinsideを返す。この拡張を追加するために「@check」と記述する。これでDecorators(デコレータ)で拡張ができる。最後に、add()関数を呼び出すために関数の名前を記述する。

■実行・検証

このセルを保存し、Google Colaboratory上で、セルを実行してみます。

実行してみると、def文を用いてadd()関数内の処理には、if文でもしbが0に等しい(比較演算子”==”)場合に、日本語の文字列をprint()を出力させるという処理は記述していないが、Decorators(デコレータ)を使用したことで拡張され、check()関数の内部関数の処理が行われ、日本語の文字列を出力させることができました。

これがもしbが0に等しくない場合は、拡張された関数の内部関数のif文の条件には当てはまらないので、日本語の文字列は出力されない。

コメント

タイトルとURLをコピーしました