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

Barbara Streisand
リリース: 2024-10-17 17:00:03
オリジナル
959 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート