ホームページ >バックエンド開発 >Python チュートリアル >Python デコレータで「functools.wraps」は何をしますか?

Python デコレータで「functools.wraps」は何をしますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-01 04:33:17725ブラウズ

What Does `functools.wraps` Do in Python Decorators?

functools.wraps の機能を明らかにする

Python デコレータの領域内では、functools.wraps の目的は何なのかという疑問が生じます。 ?

理解デコレータ

デコレータを使用すると、既存の関数をカスタム ロジックでラップすることで、その機能を強化できます。ただし、このラッピング プロセスにより、元の関数に関連付けられたメタデータ、つまり名前、ドキュメント、引数リストが失われる可能性があります。

functools.wraps の紹介

ここで functools.wraps が活躍します。これは、メタデータ損失の問題に取り組むデコレーターです。 @wraps(func) をデコレーター関数に適用することで、デコレーターに元の関数のメタデータを継承するよう指示します。

functools.wraps の仕組み

  • 関数名を保持します: 修飾された関数の名前がその名前で置き換えられないようにします
  • Maintains Docstring: 元の関数のドキュメントを装飾された関数にコピーします。
  • Retain Arguments: 装飾された関数が保持されることを保証します。元の引数と同じ引数の署名function.

使用例

次の例を考えてみましょう:

def logged(func):
    @wraps(func)
    def with_logging(*args, **kwargs):
        print(func.__name__ + " was called")
        return func(*args, **kwargs)
    return with_logging

@logged
def f(x):
    """Computes a mathematical operation."""
    return x + x * x

ログに記録されたデコレータに @wraps(func) を適用することによって、ラップされた関数 f が元の名前、ドキュメント、引数を保持していることを確認します。 list:

  • print(f.__name__) 出力 'f'
  • print(f.__doc__) prints '数学的演算を計算します。'

結論

functools.wraps のプレイデコレータでラップされた関数のメタデータを保存し、重要な情報が失われないようにするという重要な役割を果たします。 @wraps(func) を使用すると、元の特性を損なうことなく関数の動作を効果的に強化する、柔軟で有益なデコレーターを作成できます。

以上がPython デコレータで「functools.wraps」は何をしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。