デコレータに引き数を渡せる?

はい、デコレータに引数を渡すことができます。一般的には、デコレータファクトリと呼ばれる関数を定義し、その中で実際のデコレータを作成する方法が一般的です。デコレータファクトリは、引数を受け取り、それに基づいて適切なデコレータを返します。

以下は、デコレータファクトリを使用して引数を受け取る例です。

python
import functools import logging def log_with_level(level): def decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): logging.log(level, f"Function {func.__name__} started.") result = func(*args, **kwargs) logging.log(level, f"Function {func.__name__} finished.") return result return wrapper return decorator logging.basicConfig(filename='history.log', level=logging.INFO) @log_with_level(logging.INFO) def function1(): print("Function 1 executing.") @log_with_level(logging.DEBUG) def function2(): print("Function 2 executing.") function1() function2()

この例では、log_with_levelデコレータファクトリを使用して、ログレベルを引数として受け取ります。そして、それを基に適切なログレベルでログを記録するデコレータを返します。function1function2にはそれぞれ異なるログレベルが指定されており、それに基づいてログが出力されます。

未分類

Posted by ぼっち