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文の条件には当てはまらないので、日本語の文字列は出力されない。
コメント