デコレータによる関数シグネチャの保持
デコレータは 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 サイトの他の関連記事を参照してください。