ホームページ >バックエンド開発 >Python チュートリアル >`functools.wraps` は Python デコレータで元の関数属性をどのように保持しますか?
functools.wraps について
Python プログラミングでは、関数に機能を追加するためにデコレーターがよく使用されます。ただし、decorators を使用すると、元の関数が新しい関数に置き換えられる場合があり、名前、docstring、引数リストなどの重要な関数属性が失われる可能性があります。
ここで functools.wraps が登場します。これは、ユーザーがデコレータを適用するときに元の関数の属性を保持できるようにするデコレータです。基本的に、デコレータによって作成された新しい関数を元の関数の属性で「ラップ」します。
次の例を考えてみましょう。
def logged(func): @wraps(func) def with_logging(*args, **kwargs): print(func.__name__ + " was called") return func(*args, **kwargs) return with_logging
このデコレータを使用すると、次のことが保証されます。関数は、ロギング機能によって変更されていても、元の名前、docstring、および引数リストを保持します。これがどのように機能するかの例を次に示します。
@logged def f(x): """does some math""" return x + x * x print(f.__name__) # prints 'f' print(f.__doc__) # prints 'does some math'
functools.wraps がなければ、デコレーターは元の functionf を別の名前で docstring のない新しい関数に置き換えることになるため、識別と解釈が困難になります。関数の動作。
以上が`functools.wraps` は Python デコレータで元の関数属性をどのように保持しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。