1. ホーム
  2. パイソン

[解決済み】メソッドのパラメータ名を取得する方法は?

2022-03-31 13:03:17

質問

Pythonの関数が与えられた。

def a_method(arg1, arg2):
    pass

引数の番号と名前を抽出するにはどうしたらよいですか。すなわち、もし私が func が欲しい。 func.[something] を返すように ("arg1", "arg2") .

この場合の使用シナリオは、デコレーターを持っていて、実際の関数に現れるのと同じ順序でメソッドの引数をキーとして使用したい場合です。つまり、次のようなデコレータを作成するとどうなるでしょうか。 "a,b" を呼び出すと a_method("a", "b") ?

解決方法は?

をご覧ください。 inspect モジュールは、様々なコード・オブジェクトのプロパティを検査することができます。

>>> inspect.getfullargspec(a_method)
(['arg1', 'arg2'], None, None, None)

他の結果は、*args と **kwargs 変数の名前と、提供されたデフォルトです。

>>> def foo(a, b, c=4, *arglist, **keywords): pass
>>> inspect.getfullargspec(foo)
(['a', 'b', 'c'], 'arglist', 'keywords', (4,))

Pythonの実装によっては、いくつかのcallableがintrospectableでない場合があることに注意してください。例えば、CPythonでは、Cで定義されたいくつかの組み込み関数は、その引数についてのメタデータを提供しません。その結果 ValueError を使用した場合 inspect.getfullargspec() を組み込み関数で使用することができます。

Python 3.3以降では、Pythonのファイル名で inspect.signature() を使用すると、呼び出し可能なオブジェクトの呼び出し署名を見ることができます。

>>> inspect.signature(foo)
<Signature (a, b, c=4, *arglist, **keywords)>