見出し画像

デコレータについて【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冊


気になる本があれば
試し読みだけでも♪
(´▽`)

この記事が気に入ったらサポートをしてみませんか?