ホームページ  >  記事  >  バックエンド開発  >  Python デコレーターを使用して関数の署名を保存するにはどうすればよいですか?

Python デコレーターを使用して関数の署名を保存するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-17 17:00:03873ブラウズ

How to Preserve Function Signatures with Python Decorators?

デコレータによる関数シグネチャの保持

デコレータは Python の強力なツールですが、装飾された関数シグネチャに関する問題を引き起こす可能性もあります。元の関数の署名を保持するには、次のアプローチを検討してください。

アプローチ 1: デコレーター モジュール

デコレーター モジュール (pip install デコレーター) をインストールし、使用するデコレーターを調整します。 @decorator.decorator 構文:

<code class="python">import decorator

@decorator.decorator
def args_as_ints(f, *args, **kwargs):
    args = [int(x) for x in args]
    kwargs = dict((k, int(v)) for k, v in kwargs.items())
    return f(*args, **kwargs)</code>

アプローチ 2: functools.wraps() (Python 3.4 )

Python 3.4 では functools.wraps() が導入されました。関数シグネチャを保持します:

<code class="python">import functools

def args_as_ints(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        args = [int(x) for x in args]
        kwargs = dict((k, int(v)) for k, v in kwargs.items())
        return func(*args, **kwargs)
    return wrapper</code>

どちらのアプローチも、装飾後の関数シグネチャを効果的に保持します。さらに、functools.wraps() は、古い Python バージョンとの互換性のために使用できます。

以上がPython デコレーターを使用して関数の署名を保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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