「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Pythonでデコレーターを使用するときに機能署名を保存する方法は?

Pythonでデコレーターを使用するときに機能署名を保存する方法は?

2025-03-24に投稿されました
ブラウズ:445

How to Preserve Function Signatures When Using Decorators in Python?

装飾機能の署名を保存する

装飾は、Python機能の機能を強化するための強力なツールです。ただし、元の関数の署名を不明瞭にすることがあります。これは、ドキュメント、デバッグ、および自動化されたツールに問題がある場合があります。 def g(*args、** kwargs): args = [int(x)for x in args] kwargs = dict((k、int(v))for k、v in kwargs.items()) furne f(*args、** kwargs) g

を返す装飾は予想どおりに機能しますが、装飾された関数の署名は「 args、*kwargs」に置き換えられ、元の引数に関する情報を失います。満足のいくもの:

署名をdocstringに手動でコピーします。モジュールはエレガントなソリューションを提供します:
def args_as_ints(f):
    def g(*args, **kwargs):
        args = [int(x) for x in args]
        kwargs = dict((k, int(v)) for k, v in kwargs.items())
        return f(*args, **kwargs)
    return g
インポートデコレーター @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)

このデコレーターは、ラップされた関数に引数として渡すことにより、元の関数の署名を保持します。 def funny_function(x、y、z = 3): "" "Computes x*y 2*z" "" x*y 2*z

return、装飾された関数funny_functionは元の署名を保持します:

>>> help(funny_function) モジュール__main__の関数funny_functionのヘルプ: Funny_function(x、y、z = 3) x*y 2*z

python 3.4:

  • for python 3.4以降、funcctools.wrapsが同様のソリューションを提供する:
  • kwargs = dict((k、int(v))for k、v in kwargs.items()) return func(*args、** kwargs) return wrapper
  • これらの手法を使用することにより、デコレーターは元の署名を保持しながら関数機能を強化し、コードベースの明確さと一貫性を確保します。
リリースステートメント この記事は、侵害がある場合は1729155261に再現されています。勉強[email protected]に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3