以前に受け入れられた回答は、の時点で廃止されましたPython 3.0
。使用inspect.getargspec
する代わりに、Signature
それを置き換えるクラスを選択する必要があります。
関数のシグネチャの作成は、関数を介して簡単signature
です。
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
これで、パラメーターを使用して、パラメーターをすばやく表示できますstr
。
str(sig) # returns: '(self, arg1, kwarg1=None)'
または、を介して属性名のパラメーターオブジェクトへのマッピングを取得することもできますsig.parameters
。
params = sig.parameters
print(params['kwarg1']) # prints: kwarg1=20
さらに、あなたは呼び出すことができます len
のsig.parameters
も、この機能が必要とする引数の数を確認します。
print(len(params)) # 3
の各エントリ params
マッピングの実際には、Parameter
オブジェクトをより簡単に使用できるようにする追加の属性を持っています。たとえば、パラメータを取得してデフォルト値を表示することは、次のように簡単に実行できます。
kwarg1 = params['kwarg1']
kwarg1.default # returns: None
に含まれる残りのオブジェクトについても同様ですparameters
。
Python 2.x
ユーザーについてinspect.getargspec
は、非推奨ではありませんが、言語はまもなく:-)になります。このSignature
クラスは、2.x
シリーズでません。したがって、引き続きで作業する必要がありますinspect.getargspec
。
あなたはのインターフェイスに依存しているコードがある場合はPython 2と3の間の移行については、getargspec
Pythonの2とへの切り替えsignature
では3
難しすぎると、あなたは貴重なオプション持っています使用してのをinspect.getfullargspec
。これは、getargspec
関数の引数を取得するために(単一の呼び出し可能な引数)と同様のインターフェースを提供すると同時に、次のような追加のケースを処理getargspec
します。
from inspect import getfullargspec
def someMethod(self, arg1, kwarg1=None):
pass
args = getfullargspec(someMethod)
同じようにgetargspec
、getfullargspec
返すNamedTuple
引数が含まれています。
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
inspect
標準ライブラリモジュールを正当化することはできません。