デコレータについて【Python🐍】
こんにちは!
パソコンインストラクター歴12年目の
チサです。(*´∀`)
今日はPython🐍の
デコレーターのお話を
書こうと思います。
デコレーターというのは
関数を実行するときに
その関数の中身をいじらずに
機能を追加する⁉️
そんなことができる
方法のこと。
元の関数に
デコレーションする⁉️
そんな意味から
デコレーターって
呼ばれているのかな?
🤔
でもね。。
このデコレーター…
ものすごい抽象的な書き方なので
パッと見て
何やってるのか
ほんとに意味不明だったのですが💦
(¯∇¯٥)
ここ数日
復習してたら
ちょっとわかってきた気がするので
(なんとなくですが。。)
今、わたしがわかってることを
書いてみようと思います🔥
例えばこんな関数が
あったとします…
👇
def carry():
print("カレーを作りました🍛")
curry()
curry関数🍛
𐤔wʷ 🤣 𐤔w𐤔
ただただ
『カレーを作りました🍛』
と出力する関数です。
( ´∀` )
このcurry関数🍛に
デコレーターを使って
追加で
こんな風に出力したい!
👇
手を洗いました👐
カレーを作りました🍛
みんなでおいしく食べました
curry関数の前に
『手を洗いました👐』
curry関数の後に
『みんなでおいしく食べました』
この2つを
デコレーターを使って
追加しようと思います。
どんな風に書くのかというと
こんな感じ👇
def deco(func):
def ikki():
print("手を洗いました👐")
func()
print("みんなでおいしく食べました")
return ikki
@deco
def curry():
print("カレーを作りました🍛")
curry()
メインのcurry関数🍛の
真上に@のデコレーターを付けました。
こうすることで
@のうしろにある文字
(今回の場合…deco)関数に
carry関数🍛を
引数として渡すことができる!
( ๑´•ω•)ヘェー
deco関数は
何をしてるかと言うと
受け取ったcurry関数🍛を
引数のfuncに入れて
ikki関数を定義し
returnで
ikki関数をデコレーターに戻してます。
(ikki関数を実行はしてるわけではない)
ikki関数は
❶『手を洗いました👐』を出力
❷ func関数 = curry関数の実行
❸『みんなでおいしく食べました』を出力
この❶❷❸を順にやってくれる関数
def deco(func):
def ikki():
print("手を洗いました👐")
func()
print("みんなでおいしく食べました")
return ikki
@deco
def curry():
print("カレーを作りました🍛")
curry()
一番最後の
curry()で
デコレーターの戻り値(ikki関数)が
実行される…
そんな仕組みのようです💦
(その解釈であってるのかな?)
とにかく…
なんとなーーーくですが…
デコレーターの役割が
ちょっと理解できた気がしますꉂ🤣𐤔𐤔
@のデコレーターをついてるときは
その下にある関数に
何か機能を追加しているという意味
何を追加するのか⁉️
については…
@の後ろの関数の中に
定義している関数
(今回の場合ikki関数)を
確認するとわかりやすいね。
( *´ㅅ`)⁾⁾ウンウン
今後も
デコレーターを発見したら
どんな追加機能があるのか⁉️
そこに注目して
コードを読んでいこうと思います♪
(о´∀`о)
ではでは
またあした!
(´꒳`)/
2022年12月吉日🎉
11冊目の新刊📕
【プロが教える】
かんたん・かわいい 図形で作るイラスト講座
出版しました!
ヾ(o´∀`o)ノワァーィ♪
イラストを描くのが苦手な方も
図形を使えば
かわいいイラスト作れちゃいますよ♪
(紙の📕もご用意してます)
【Amazonで販売中のKindle📕】
➊パソコンに関する📕 3冊
➋Kindle出版に関する📕 2冊
➌節約に関する📕 1冊
➍読書に関する📕 1冊
➎海外の方向けの📕 3冊
気になる本があれば
試し読みだけでも♪
(´▽`)
この記事が気に入ったらサポートをしてみませんか?