pythonフレームワークのDjango扱ってる者です^^
デコレータは、最初は、おまじないとして、関数に機能追加できるおまじないと考えると良いと思います。
下記に理解しやすいと個人的に思う実践的な例をあげますね^^
例えばshow_mypageという自己紹介ページを表示する関数をつくったとしますね、
python
1
2def show_mypage():
3 (mypageを表示する関数の操作)
4
だけだと、単にdef show_mypageが呼び出されると、自己紹介ページを表示するだけです。
ここでログインがあるかなしかチェックして、ログインしている人だけが関数の結果を見れて、ログインしてない人が関数を呼び出す(自己紹介ページを見ようとする)と、エラーにするという関数でneed_loginというものがあるとします(このような関数は自分で作る人もいますが、大抵は他の人が作ったもの(フレームワークに準備されているものなど)を使います)
python
1
2def need_login():
3 (関数を動作させようとすると、ログインしてるかどうか確認してログインしている(True)なら関数を稼働させる、ログインしていない(False)ならエラーを表示する機能)
4
とします。
このとき、
python
1from (need_loginの書いたファイルのある場所) import need_login
2
3@need_login
4def show_mypage():
5 (mypageを表示する関数の操作)
6
と書くと、def show_mypage():に、def need_login():の機能が追加された!という状態になり、
今までデコレータなしだと
単にdef show_mypageが呼び出されると、自己紹介ページを表示するだけ だったのが、
デコレータありになると、自己紹介ページを表示する前に、ログインしてるかどうか確認してログインしている(True)なら自己紹介ページを表示、ログインしていない(False)ならエラーを表示する
という仕組みをつくることができるというわけです。
この構造がわかれば、文法的にどうなっているかは、例えば下記のリンクの記事など見ていただければ理解しやすいかなと思います。
Python - デコレータ
http://www17.atpages.jp/~lambda7/py/decorator.html
ではもし参考になれば幸いです^^
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/20 11:57
2017/05/20 15:17