Pythonのデコレータは、関数やメソッドの前後に特定の処理を追加して拡張するための機能です。デコレータは、通常、@decorator
という構文を使用して関数やメソッドの定義の直前に適用されます。
def my_decorator(func):
def wrapper(*args, **kwargs):
print("start")
func(*args, **kwargs)
print("end")
return wrapper
@my_decorator
def say_hello():
print("hello")
say_hello()
上記の例では、say_hello
関数の前後にstart
とend
を出力するデコレータを適用しています。
デコレータ内で*args
と**kwargs
を使用すると、任意の数の位置引数やキーワード引数を受け取ることができます。これにより、デコレータが元の関数の引数の数や種類に影響されないことを保証します。
def my_decorator(func):
def wrapper(*args, **kwargs):
print('--- decorator before my_func ---')
my_func(*args, **kwargs)
print('--- decorator after my_func ---\\n')
return wrapper
@my_decorator
def print_hello(a, b):
print('my function hello world')
print_hello(1, 2)
print_hello(a=1, b=2)
上記の例では、print_hello
関数に引数を渡すと、デコレータ内のwrapper
関数でもそれらの引数を受け取ることができます。
このように、Pythonのデコレータとargs
, kwargs
を理解し活用することで、コードの再利用性と可読性を向上させることができます。