ホームページ >バックエンド開発 >Python チュートリアル >装飾された関数の署名を保存する方法

装飾された関数の署名を保存する方法

Barbara Streisand
Barbara Streisandオリジナル
2024-10-17 16:59:02912ブラウズ

How to Preserve Signatures of Decorated Functions

装飾された関数の署名の保持

この問題は、型変換、ロギング、メモ化など、関数の引数を変更する汎用デコレーターで関数を装飾するときに発生します。装飾された関数は元の関数のドキュメントとシグネチャを継承できないため、その動作を理解することが困難になります。

この問題に対処するために、複数の回避策が提案されています。

方法 1: ' を使用するDecorator' Module

pip を使用して 'decorator' モジュールをインストールし、decorator.decorator アノテーションを含むようにデコレータ定義を変更します。これにより、関数の署名を保持しながらデコレーターが汎用性を維持することが保証されます。

<code class="python">import decorator

@decorator.decorator
def args_as_ints(f, *args, **kwargs):
    # Perform argument conversion
    return f(*args, **kwargs)</code>

方法 2: 'functools.wraps()' を使用する

Python 3.4 以降の場合、'functools.wraps( )' は、関数の署名とドキュメントの両方を自動的に保存する代替ソリューションを提供します。

<code class="python">import functools

def args_as_ints(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        # Perform argument conversion
        return func(*args, **kwargs)
    return wrapper</code>

結論

どちらの方法も、元の関数の署名とドキュメントを効果的に保存します。 「decorator」モジュールは Python 2 および 3 に適していますが、「functools.wraps()」は Python 3.4 以降でのみ使用できます。

以上が装飾された関数の署名を保存する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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