Python入門 デコレータについて

lecture

デコレータは既存の関数を書き換えずに変更を加えることができます。
デコレータを理解するには、関数内関数を使ってみることです。

Pythonは関数の引数として関数を渡すことができます。
まずは関数内関数の実例を見てください。

def cake(func):
  def wrapper(topping='イチゴ'):
    return func(topping) + 'ケーキ'
  return wrapper

def my_topping(favorite):
  print('私の好きなケーキは',end='')
  return favorite
 
your_cake = cake(my_topping)
print(your_cake())
print(your_cake('チョコレート'))

結果
私の好きなケーキはイチゴケーキ
私の好きなケーキはチョコレートケーキ

同じ内容のものをデコレータで記述するとすっきりと書けます。

def cake(func):
  def wrapper(topping='イチゴ'):
    return func(topping) + 'ケーキ'
  return wrapper

@cake
def my_topping(favorite):
  print('私の好きなケーキは',end='')
  return favorite
 
print(my_topping())
print(my_topping('チョコレート'))

結果
私の好きなケーキはイチゴケーキ
私の好きなケーキはチョコレートケーキ

スポンサーリンク

Flaskでの活用

デコレータの仕組みはFlaskのルーティングでもうまく活用されています。

@app.route('/')
def welcome():
    return 'Welcome!'

Flaskをインスタンス化しておいて、route()メソッドに対して自作したwelcome()関数をデコレートすることで、ルート割り当てに対して指定した表示内容を表示させることができています。

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