以前に受け入れられた回答は、の時点で廃止されました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の間の移行については、getargspecPythonの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標準ライブラリモジュールを正当化することはできません。