0
0

PythonのデコレータはSpringでいうAOPと同じ概念

Last updated at Posted at 2023-12-09

Pythonのデコレータってめちゃくちゃ難しいなーって思ってたけど、結局表題に帰結する。
「引数で関数を受け取って、関数を返す」とか難しいことを言っている記事が多かったけど、結局、その対象のメソッドを実行する前後に何をしたいかどうかだけ。

decorator.py
def foo(func: function):
    def wrapper(*args, **kwargs):
        print("事前に実行します。")
        value = func(*args, **kwargs)
        print("事後に実行します。")
        return value

    return wrapper
main.py
from decorator import foo

@foo
def bar():
    print("barです。")

bar()

結果は、下記になる。

事前に実行します。
barです。
事後に実行します。

結局、barが実行される前に、fooのwrapperの関数が呼ばれるだけだ。
wrapperの引数は、barの引数依存をなくすためにあるだけ。

foo -> wrapper -> print("事前に実行します。")
-> func -> print("barです。")
-> wrapper -> print("事後に実行します。")

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0