inspect —ライブオブジェクトを検査します
ソースコード: :source: `Lib / inspect.py`
inspect モジュールは、モジュール、クラス、メソッド、関数、トレースバック、フレームオブジェクト、コードオブジェクトなどのライブオブジェクトに関する情報を取得するのに役立ついくつかの便利な関数を提供します。 たとえば、クラスの内容を調べたり、メソッドのソースコードを取得したり、関数の引数リストを抽出してフォーマットしたり、詳細なトレースバックを表示するために必要なすべての情報を取得したりするのに役立ちます。
このモジュールによって提供されるサービスには、主に4種類あります。型チェック、ソースコードの取得、クラスと関数の検査、およびインタープリタースタックの検査です。
タイプとメンバー
getmembers()関数は、クラスやモジュールなどのオブジェクトのメンバーを取得します。 名前が「is」で始まる関数は、主に getmembers()の2番目の引数の便利な選択肢として提供されています。 また、次の特別な属性をいつ見つけることができるかを判断するのにも役立ちます。
タイプ | 属性 | 説明 |
---|---|---|
モジュール | __doc__ | ドキュメント文字列 |
__ファイル__ | ファイル名(組み込みモジュールにはありません) | |
クラス | __doc__ | ドキュメント文字列 |
__名前__ | このクラスが定義された名前 | |
__qualname__ | 修飾名 | |
__モジュール__ | このクラスが定義されたモジュールの名前 | |
方法 | __doc__ | ドキュメント文字列 |
__名前__ | このメソッドが定義された名前 | |
__qualname__ | 修飾名 | |
__func__ | メソッドの実装を含む関数オブジェクト | |
__自己__ | このメソッドがバインドされているインスタンス、またはNone
| |
__モジュール__ | このメソッドが定義されたモジュールの名前 | |
関数 | __doc__ | ドキュメント文字列 |
__名前__ | この関数が定義された名前 | |
__qualname__ | 修飾名 | |
__コード__ | コンパイルされた関数を含むコードオブジェクト bytecode | |
__defaults__ | 位置パラメータまたはキーワードパラメータのデフォルト値のタプル | |
__kwdefaults__ | キーワードのみのパラメータのデフォルト値のマッピング | |
__globals__ | この関数が定義されたグローバル名前空間 | |
__注釈__ | パラメータ名の注釈へのマッピング。 "return" キーは、リターン注釈用に予約されています。
| |
__モジュール__ | この関数が定義されたモジュールの名前 | |
トレースバック | tb_frame | このレベルのフレームオブジェクト |
tb_lasti | 最後に試行された命令のインデックス(バイトコード) | |
tb_lineno | Pythonソースコードの現在の行番号 | |
tb_next | 次の内部トレースバックオブジェクト(このレベルで呼び出されます) | |
フレーム | f_back | 次の外部フレームオブジェクト(このフレームの呼び出し元) |
f_builtins | このフレームで見られる組み込みの名前空間 | |
f_code | このフレームで実行されているコードオブジェクト | |
f_globals | このフレームで見られるグローバル名前空間 | |
f_lasti | 最後に試行された命令のインデックス(バイトコード) | |
f_lineno | Pythonソースコードの現在の行番号 | |
f_locals | このフレームで見られるローカル名前空間 | |
f_trace | このフレームのトレース機能、またはNone
| |
コード | co_argcount | 引数の数(キーワードのみの引数、*または**引数は含まれません) |
co_code | コンパイルされた生のバイトコードの文字列 | |
co_cellvars | セル変数の名前のタプル(スコープを含むことによって参照されます) | |
co_consts | バイトコードで使用される定数のタプル | |
co_filename | このコードオブジェクトが作成されたファイルの名前 | |
co_firstlineno | Pythonソースコードの最初の行の数 | |
co_flags | CO_* フラグのビットマップ、続きを読むここ
| |
co_lnotab | 行番号のバイトコードインデックスへのエンコードされたマッピング | |
co_freevars | 自由変数の名前のタプル(関数のクロージャーを介して参照) | |
co_posonlyargcount | 位置のみの引数の数 | |
co_kwonlyargcount | キーワードのみの引数の数(**引数を含まない) | |
co_name | このコードオブジェクトが定義された名前 | |
co_names | ローカル変数の名前のタプル | |
co_nlocals | ローカル変数の数 | |
co_stacksize | 必要な仮想マシンのスタックスペース | |
co_varnames | 引数とローカル変数の名前のタプル | |
発生器 | __名前__ | 名前 |
__qualname__ | 修飾名 | |
gi_frame | フレーム | |
gi_running | 発電機は動いていますか? | |
gi_code | コード | |
gi_yieldfrom | yield from またはNone によって繰り返されるオブジェクト
| |
コルーチン | __名前__ | 名前 |
__qualname__ | 修飾名 | |
cr_await | 待機中のオブジェクト、またはNone
| |
cr_frame | フレーム | |
cr_running | コルーチンは実行されていますか? | |
cr_code | コード | |
cr_origin | コルーチンが作成された場所、またはNone 。 sys.set_coroutine_origin_tracking_depth()を参照してください
| |
ビルトイン | __doc__ | ドキュメント文字列 |
__名前__ | この関数またはメソッドの元の名前 | |
__qualname__ | 修飾名 | |
__自己__ | メソッドがバインドされているインスタンス、またはNone
|
バージョン3.5で変更:ジェネレーターに__qualname__
およびgi_yieldfrom
属性を追加します。
ジェネレーターの__name__
属性は、コード名ではなく関数名から設定されるようになり、変更できるようになりました。
バージョン3.7で変更:コルーチンにcr_origin
属性を追加。
- inspect.getmembers(object[, predicate])
名前でソートされた
(name, value)
ペアのリスト内のオブジェクトのすべてのメンバーを返します。 オプションの predicate 引数(各メンバーのvalue
オブジェクトで呼び出されます)が指定されている場合、述語が真の値を返すメンバーのみが含まれます。ノート
getmembers()は、引数がクラスであり、それらの属性がメタクラスのカスタム
__dir__()
にリストされている場合にのみ、メタクラスで定義されたクラス属性を返します。
- inspect.getmodulename(path)
ファイル path で指定されたモジュールの名前を、囲んでいるパッケージの名前を含めずに返します。 ファイル拡張子は、 importlib.machinery.all_suffixes()のすべてのエントリに対してチェックされます。 一致する場合、拡張子が削除された最終パスコンポーネントが返されます。 それ以外の場合は、
None
が返されます。この関数 only は、実際のPythonモジュールに意味のある名前を返すことに注意してください。Pythonパッケージを参照する可能性のあるパスは、引き続き
None
を返します。バージョン3.3で変更:この関数は importlib に直接基づいています。
- inspect.ismodule(object)
- オブジェクトがモジュールの場合は、
True
を返します。
- inspect.isclass(object)
- オブジェクトがクラスである場合、組み込みであるかPythonコードで作成されているかにかかわらず、
True
を返します。
- inspect.ismethod(object)
- オブジェクトがPythonで記述されたバインドされたメソッドである場合は、
True
を返します。
- inspect.isfunction(object)
- オブジェクトがPython関数の場合、
True
を返します。これには、 lambda 式によって作成された関数が含まれます。
- inspect.isgeneratorfunction(object)
オブジェクトがPythonジェネレーター関数の場合は、
True
を返します。バージョン3.8で変更: functools.partial()でラップされた関数は、ラップされた関数がPythonジェネレーター関数の場合、
True
を返すようになりました。
- inspect.isgenerator(object)
- オブジェクトがジェネレーターの場合は、
True
を返します。
- inspect.iscoroutinefunction(object)
オブジェクトがコルーチン関数( async def 構文で定義された関数)の場合は、
True
を返します。バージョン3.5の新機能。
バージョン3.8で変更: functools.partial()でラップされた関数は、ラップされた関数がコルーチン関数の場合、
True
を返すようになりました。
- inspect.isawaitable(object)
オブジェクトが await 式で使用できる場合は、
True
を返します。ジェネレーターベースのコルーチンを通常のジェネレーターと区別するためにも使用できます。
バージョン3.5の新機能。
- inspect.isasyncgenfunction(object)
オブジェクトが非同期ジェネレーター関数の場合、
True
を返します。次に例を示します。バージョン3.6の新機能。
バージョン3.8で変更: functools.partial()でラップされた関数は、ラップされた関数が非同期ジェネレーター関数である場合、
True
を返すようになりました。
- inspect.isasyncgen(object)
オブジェクトが非同期ジェネレーター関数によって作成された非同期ジェネレーターイテレーターの場合、
True
を返します。バージョン3.6の新機能。
- inspect.istraceback(object)
- オブジェクトがトレースバックの場合は、
True
を返します。
- inspect.isframe(object)
- オブジェクトがフレームの場合は、
True
を返します。
- inspect.iscode(object)
- オブジェクトがコードの場合は、
True
を返します。
- inspect.isbuiltin(object)
- オブジェクトが組み込み関数またはバインドされた組み込みメソッドの場合は、
True
を返します。
- inspect.isroutine(object)
- オブジェクトがユーザー定義または組み込みの関数またはメソッドである場合は、
True
を返します。
- inspect.isabstract(object)
- オブジェクトが抽象基本クラスの場合は、
True
を返します。
- inspect.ismethoddescriptor(object)
オブジェクトがメソッド記述子の場合は
True
を返しますが、 ismethod()、 isclass()、 isfunction()、またはの場合は返しません。 ] isbuiltin()はtrueです。これは、たとえば、
int.__add__
に当てはまります。 このテストに合格したオブジェクトには、 __ get __()メソッドがありますが、 __ set __()メソッドはありませんが、それを超えると、属性のセットが異なります。 __ name __ 属性は通常賢明であり、__doc__
はしばしば賢明です。他のテストの1つにも合格する記述子を介して実装されたメソッドは、 ismethoddescriptor()テストから
False
を返します。これは、他のテストがより多くのことを約束しているからです。たとえば、[オブジェクトが ismethod()を通過したときのX217X] 属性(など)。
- inspect.isdatadescriptor(object)
オブジェクトがデータ記述子の場合は、
True
を返します。データ記述子には、 __ set __ または __ delete __ メソッドがあります。 例としては、プロパティ(Pythonで定義)、getsets、およびメンバーがあります。 後者の2つはCで定義されており、これらのタイプで利用できるより具体的なテストがあり、Pythonの実装全体で堅牢です。 通常、データ記述子には __ name __ 属性と
__doc__
属性もあります(プロパティ、getset、およびメンバーにはこれらの属性の両方があります)が、これは保証されません。
- inspect.isgetsetdescriptor(object)
- オブジェクトがgetset記述子の場合は、
True
を返します。
- inspect.ismemberdescriptor(object)
- オブジェクトがメンバー記述子の場合は、
True
を返します。
ソースコードの取得
- inspect.getdoc(object)
cleandoc()でクリーンアップされたオブジェクトのドキュメント文字列を取得します。 オブジェクトのドキュメント文字列が指定されておらず、オブジェクトがクラス、メソッド、プロパティ、または記述子である場合は、継承階層からドキュメント文字列を取得します。
バージョン3.5で変更:ドキュメント文字列は、オーバーライドされない場合でも継承されるようになりました。
- inspect.getcomments(object)
- オブジェクトのソースコードの直前(クラス、関数、またはメソッドの場合)、またはPythonソースファイルの先頭(オブジェクトがモジュールの場合)のコメント行を1つの文字列で返します。 オブジェクトのソースコードが利用できない場合は、
None
を返します。 これは、オブジェクトがCまたはインタラクティブシェルで定義されている場合に発生する可能性があります。
- inspect.getfile(object)
- オブジェクトが定義された(テキストまたはバイナリ)ファイルの名前を返します。 オブジェクトが組み込みのモジュール、クラス、または関数の場合、これは TypeError で失敗します。
- inspect.getmodule(object)
- オブジェクトがどのモジュールで定義されているかを推測してみてください。
- inspect.getsourcefile(object)
- オブジェクトが定義されたPythonソースファイルの名前を返します。 オブジェクトが組み込みのモジュール、クラス、または関数の場合、これは TypeError で失敗します。
- inspect.getsourcelines(object)
オブジェクトのソース行と開始行番号のリストを返します。 引数は、モジュール、クラス、メソッド、関数、トレースバック、フレーム、またはコードオブジェクトです。 ソースコードは、オブジェクトに対応する行のリストとして返され、行番号は、元のソースファイルのどこでコードの最初の行が見つかったかを示します。 ソースコードを取得できない場合、 OSError が発生します。
- inspect.getsource(object)
オブジェクトのソースコードのテキストを返します。 引数は、モジュール、クラス、メソッド、関数、トレースバック、フレーム、またはコードオブジェクトです。 ソースコードは単一の文字列として返されます。 ソースコードを取得できない場合、 OSError が発生します。
- inspect.cleandoc(doc)
コードのブロックと整列するようにインデントされているdocstringからインデントをクリーンアップします。
先頭の空白はすべて最初の行から削除されます。 2行目以降で均一に削除できる先頭の空白はすべて削除されます。 その後、最初と最後の空の行が削除されます。 また、すべてのタブがスペースに展開されます。
Signatureオブジェクトを使用した呼び出し可能オブジェクトのイントロスペクション
バージョン3.3の新機能。
Signatureオブジェクトは、呼び出し可能オブジェクトの呼び出し署名とその戻り注釈を表します。 Signatureオブジェクトを取得するには、 signature()関数を使用します。
- inspect.signature(callable, *, follow_wrapped=True)
指定された
callable
の Signature オブジェクトを返します。プレーンな関数やクラスから functools.partial()オブジェクトまで、幅広いPython呼び出し可能オブジェクトを受け入れます。
署名を提供できない場合は ValueError を発生させ、そのタイプのオブジェクトがサポートされていない場合は TypeError を発生させます。
関数のシグニチャーのスラッシュ(/)は、その前のパラメーターが位置のみであることを示します。 詳細については、位置のみのパラメータに関するFAQエントリを参照してください。
バージョン3.5の新機能:
follow_wrapped
パラメーター。False
を渡して、callable
の署名を具体的に取得します(callable.__wrapped__
は、装飾された呼び出し可能オブジェクトのラップを解除するために使用されません)。ノート
一部の呼び出し可能オブジェクトは、Pythonの特定の実装ではイントロスペクトできない場合があります。 たとえば、CPythonでは、Cで定義された一部の組み込み関数は、引数に関するメタデータを提供しません。
- class inspect.Signature(parameters=None, *, return_annotation=Signature.empty)
Signatureオブジェクトは、関数の呼び出しシグネチャとその戻りアノテーションを表します。 関数によって受け入れられたパラメーターごとに、パラメーターオブジェクトをパラメーターコレクションに格納します。
オプションの parameters 引数は、 Parameter オブジェクトのシーケンスであり、重複する名前のパラメーターがないこと、およびパラメーターが正しい順序になっていることを確認するために検証されます。 最初に定位置のみ、次に定位置またはキーワード、およびデフォルトのあるパラメーターはデフォルトのないパラメーターの後に続きます。
オプションの return_annotation 引数は、任意のPythonオブジェクトにすることができ、呼び出し可能オブジェクトの「return」アノテーションです。
署名オブジェクトは不変です。 Signature.replace()を使用して、変更されたコピーを作成します。
バージョン3.5で変更:署名オブジェクトは選択可能でハッシュ可能です。
- empty
リターンアノテーションがないことを指定するための特別なクラスレベルのマーカー。
- parameters
対応する Parameter オブジェクトへのパラメーター名の順序付けられたマッピング。 パラメータは、キーワードのみのパラメータを含め、厳密な定義順に表示されます。
バージョン3.7での変更: Pythonは、バージョン3.7の時点で、キーワードのみのパラメーターの宣言順序が保持されることを明示的に保証するだけでしたが、実際には、この順序は常にPython3で保持されていました。
- return_annotation
呼び出し可能オブジェクトの「return」アノテーション。 呼び出し可能オブジェクトに「return」アノテーションがない場合、この属性は Signature.empty に設定されます。
- bind(*args, **kwargs)
位置引数とキーワード引数からパラメーターへのマッピングを作成します。
*args
と**kwargs
が署名に一致する場合、 BoundArguments を返すか、 TypeError を発生させます。
- bind_partial(*args, **kwargs)
Signature.bind()と同じように機能しますが、一部の必須引数を省略できます( functools.partial()の動作を模倣します)。 BoundArguments を返し、または、渡された引数が署名と一致しない場合は、 TypeError を発生させます。
- replace(*[, parameters][, return_annotation])
replaceが呼び出されたインスタンスに基づいて新しいSignatureインスタンスを作成します。 異なる
parameters
および/またはreturn_annotation
を渡して、基本署名の対応するプロパティをオーバーライドすることができます。 コピーした署名からreturn_annotationを削除するには、 Signature.empty を渡します。
- class inspect.Parameter(name, kind, *, default=Parameter.empty, annotation=Parameter.empty)
パラメータオブジェクトは不変です。 Parameterオブジェクトを変更する代わりに、 Parameter.replace()を使用して変更されたコピーを作成できます。
バージョン3.5で変更:パラメータオブジェクトは選択可能でハッシュ可能です。
- empty
デフォルト値と注釈がないことを指定するための特別なクラスレベルのマーカー。
- name
文字列としてのパラメータの名前。 名前は有効なPython識別子である必要があります。
- default
パラメータのデフォルト値。 パラメータにデフォルト値がない場合、この属性は Parameter.empty に設定されます。
- annotation
パラメータの注釈。 パラメータに注釈がない場合、この属性は Parameter.empty に設定されます。
- kind
引数値がパラメーターにバインドされる方法について説明します。 可能な値(
Parameter.KEYWORD_ONLY
などのパラメーターからアクセス可能):名前
意味
POSITIONAL_ONLY
値は位置引数として指定する必要があります。 位置のみのパラメーターは、Python関数定義の
/
エントリ(存在する場合)の前に表示されるパラメーターです。POSITIONAL_OR_KEYWORD
値は、キーワードまたは位置引数として指定できます(これは、Pythonで実装された関数の標準のバインディング動作です)。
VAR_POSITIONAL
他のパラメーターにバインドされていない位置引数のタプル。 これは、Python関数定義の
*args
パラメーターに対応します。KEYWORD_ONLY
値はキーワード引数として指定する必要があります。 キーワードのみのパラメーターは、Python関数定義の
*
または*args
エントリの後に表示されるパラメーターです。VAR_KEYWORD
他のパラメータにバインドされていないキーワード引数の辞書。 これは、Python関数定義の
**kwargs
パラメーターに対応します。例:デフォルト値なしですべてのキーワードのみの引数を出力します。
- kind.description
Parameter.kindの列挙値を記述します。
バージョン3.8の新機能。
例:引数のすべての説明を出力します。
- replace(*[, name][, kind][, default][, annotation])
置き換えられたインスタンスが呼び出されたことに基づいて、新しいパラメータインスタンスを作成します。 Parameter 属性をオーバーライドするには、対応する引数を渡します。 パラメータからデフォルト値または/および注釈を削除するには、 Parameter.empty を渡します。
バージョン3.4で変更: Python 3.3では、
kind
がPOSITIONAL_ONLY
に設定されている場合、パラメーターオブジェクトでname
をNone
に設定できました。 ]。 これは許可されなくなりました。
- class inspect.BoundArguments
Signature.bind()または Signature.bind_partial()呼び出しの結果。 関数のパラメーターへの引数のマッピングを保持します。
- arguments
パラメータの名前から引数の値への変更可能なマッピング。 明示的にバインドされた引数のみが含まれます。 引数の変更は、引数および kwargs に反映されます。
引数処理の目的で、 Signature.parameters と組み合わせて使用する必要があります。
ノート
Signature.bind()または Signature.bind_partial()がデフォルト値に依存している引数はスキップされます。 ただし、必要に応じて、 BoundArguments.apply_defaults()を使用して追加してください。
バージョン3.9で変更: 引数はタイプ dict になりました。 以前は、タイプ collections.OrderedDict でした。
- args
位置引数値のタプル。 引数属性から動的に計算されます。
- kwargs
キーワード引数値の辞書。 引数属性から動的に計算されます。
- signature
親 Signature オブジェクトへの参照。
- apply_defaults()
欠落している引数のデフォルト値を設定します。
可変位置引数(
*args
)の場合、デフォルトは空のタプルです。可変キーワード引数(
**kwargs
)の場合、デフォルトは空のdictです。バージョン3.5の新機能。
args および kwargs プロパティを使用して、関数を呼び出すことができます。
クラスと関数
- inspect.getclasstree(classes, unique=False)
- 指定されたクラスのリストをネストされたリストの階層に配置します。 ネストされたリストが表示される場合、リストの直前にエントリがあるクラスから派生したクラスが含まれます。 各エントリは、クラスとその基本クラスのタプルを含む2タプルです。 unique 引数がtrueの場合、指定されたリストの各クラスに対して返される構造体に1つのエントリのみが表示されます。 そうしないと、多重継承を使用するクラスとその子孫が複数回表示されます。
- inspect.getargspec(func)
Python関数のパラメーターの名前とデフォルト値を取得します。 名前付きタプル
ArgSpec(args, varargs, keywords, defaults)
が返されます。 args は、パラメーター名のリストです。 varargs および keywords は、*
および**
パラメーターまたはNone
の名前です。 defaults はデフォルトの引数値のタプルであり、デフォルトの引数がない場合はNone
です。 このタプルに n 要素がある場合、それらは args にリストされている最後の n 要素に対応します。バージョン3.0以降非推奨:通常はドロップイン置換であるが、関数アノテーションとキーワードのみのパラメーターも正しく処理する更新されたAPIに getfullargspec()を使用します。
または、 signature()および Signature Object を使用します。これらは、呼び出し可能オブジェクトに対してより構造化されたイントロスペクションAPIを提供します。
- inspect.getfullargspec(func)
Python関数のパラメーターの名前とデフォルト値を取得します。 名前付きタプルが返されます。
FullArgSpec(args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations)
args は、定位置パラメーター名のリストです。 varargs は、
*
パラメーターの名前、または任意の位置引数が受け入れられない場合はNone
の名前です。 varkw は、**
パラメーターの名前、または任意のキーワード引数が受け入れられない場合はNone
の名前です。 defaults は n -最後の n 位置パラメーターに対応するデフォルト引数値のタプル、またはそのようなデフォルトが定義されていない場合はNone
です。 。 kwonlyargs は、宣言順のキーワードのみのパラメーター名のリストです。 kwonlydefaults は、 kwonlyargs から引数が指定されていない場合に使用されるデフォルト値にパラメーター名をマッピングする辞書です。 annotations は、パラメーター名を注釈にマッピングする辞書です。 特別なキー"return"
は、関数の戻り値の注釈(存在する場合)を報告するために使用されます。signature()および Signature Object は、呼び出し可能なイントロスペクションに推奨されるAPIを提供し、拡張モジュールAPIで時々発生する追加の動作(位置のみの引数など)をサポートすることに注意してください。 この関数は、主にPython 2
inspect
モジュールAPIとの互換性を維持する必要があるコードで使用するために保持されます。バージョン3.4で変更:この関数は signalture()に基づいていますが、
__wrapped__
属性を無視し、バインドされた署名出力にすでにバインドされている最初のパラメーターを含めますメソッド。バージョン3.6での変更:このメソッドは、Python3.5で signature()を優先して非推奨として以前に文書化されていましたが、明確にサポートされている標準インターフェースを復元するために、この決定が取り消されました。従来の getargspec() APIから移行する単一ソースのPython2 / 3コード。
バージョン3.7での変更: Pythonは、バージョン3.7の時点で、キーワードのみのパラメーターの宣言順序が保持されることを明示的に保証するだけでしたが、実際には、この順序は常にPython3で保持されていました。
- inspect.getargvalues(frame)
特定のフレームに渡された引数に関する情報を取得します。 名前付きタプル
ArgInfo(args, varargs, keywords, locals)
が返されます。 args は、引数名のリストです。 varargs および keywords は、*
および**
引数またはNone
の名前です。 locals は、指定されたフレームのローカル辞書です。ノート
この関数は、Python3.5で非推奨として誤ってマークされていました。
- inspect.formatargspec(args[, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations[, formatarg, formatvarargs, formatvarkw, formatvalue, formatreturns, formatannotations]])
getfullargspec()によって返された値からかなりの引数仕様をフォーマットします。
最初の7つの引数は、(
args
、varargs
、varkw
、defaults
、kwonlyargs
、kwonlydefaults
、[X97X ] )。他の6つの引数は、引数名、
*
引数名、**
引数名、デフォルト値、戻り注釈、および個々の注釈をそれぞれ文字列に変換するために呼び出される関数です。例えば:
バージョン3.5以降非推奨: signature()および Signature Object を使用します。これらは、呼び出し可能オブジェクトのより優れたイントロスペクトAPIを提供します。
- inspect.formatargvalues(args[, varargs, varkw, locals, formatarg, formatvarargs, formatvarkw, formatvalue])
getargvalues()によって返される4つの値からかなりの引数仕様をフォーマットします。 format *引数は、名前と値を文字列に変換するために呼び出される、対応するオプションのフォーマット関数です。
ノート
この関数は、Python3.5で非推奨として誤ってマークされていました。
- inspect.getmro(cls)
- clsを含むクラスclsの基本クラスのタプルをメソッド解決順に返します。 このタプルにクラスが複数回表示されることはありません。 メソッドの解決順序はclsのタイプに依存することに注意してください。 非常に特殊なユーザー定義のメタタイプが使用されていない限り、clsがタプルの最初の要素になります。
- inspect.getcallargs(func, /, *args, **kwds)
args と kwds を、Python関数またはメソッド func の引数名に、それらで呼び出されたかのようにバインドします。 バインドされたメソッドの場合、最初の引数(通常は
self
という名前)も関連付けられたインスタンスにバインドします。 引数名(*
および**
引数の名前を含む)を args および kwds [からの値にマッピングして、dictが返されます。 X165X]。 func を誤って呼び出した場合、つまりfunc(*args, **kwds)
が互換性のない署名のために例外を発生させる場合は常に、同じタイプおよび同じまたは類似のメッセージの例外が発生します。 例えば:バージョン3.2の新機能。
バージョン3.5以降非推奨:代わりに Signature.bind()および Signature.bind_partial()を使用してください。
- inspect.getclosurevars(func)
Python関数またはメソッド func の外部名参照の現在の値へのマッピングを取得します。 名前付きタプル
ClosureVars(nonlocals, globals, builtins, unbound)
が返されます。 nonlocals は参照名を字句クロージャ変数にマップし、 globals は関数のモジュールグローバルにマップし、 builtins は関数本体から見えるビルトインにマップします。 unbound は、関数で参照されている名前のセットであり、現在のモジュールのグローバルおよび組み込みを指定すると、まったく解決できませんでした。TypeError は、 func がPythonの関数またはメソッドでない場合に発生します。
バージョン3.3の新機能。
- inspect.unwrap(func, *, stop=None)
func でラップされたオブジェクトを取得します。
__wrapped__
属性のチェーンに従い、チェーンの最後のオブジェクトを返します。stop は、ラッパーチェーン内のオブジェクトを唯一の引数として受け入れるオプションのコールバックであり、コールバックが真の値を返した場合にアンラップを早期に終了できるようにします。 コールバックが真の値を返さない場合、チェーンの最後のオブジェクトが通常どおり返されます。 たとえば、 signature()はこれを使用して、チェーン内のいずれかのオブジェクトに
__signature__
属性が定義されている場合にアンラップを停止します。ValueError は、サイクルが発生した場合に発生します。
バージョン3.4の新機能。
インタプリタスタック
次の関数が「フレームレコード」を返す場合、各レコードは名前付きタプル FrameInfo(frame, filename, lineno, function, code_context, index)
です。 タプルには、フレームオブジェクト、ファイル名、現在の行の行番号、関数名、ソースコードからのコンテキスト行のリスト、およびそのリスト内の現在の行のインデックスが含まれています。
バージョン3.5で変更:タプルの代わりに名前付きタプルを返します。
ノート
これらの関数が返すフレームレコードの最初の要素にあるように、フレームオブジェクトへの参照を保持すると、プログラムで参照サイクルが作成される可能性があります。 参照サイクルが作成されると、Pythonのオプションのサイクル検出器が有効になっている場合でも、サイクルを形成するオブジェクトからアクセスできるすべてのオブジェクトの寿命がはるかに長くなる可能性があります。 このようなサイクルを作成する必要がある場合は、オブジェクトの破棄の遅延や発生するメモリ消費の増加を回避するために、それらが明示的に中断されていることを確認することが重要です。
サイクル検出器はこれらをキャッチしますが、 finally 句でサイクルを削除することにより、フレーム(およびローカル変数)の破棄を決定論的にすることができます。 これは、Pythonのコンパイル時にサイクル検出器が無効になっている場合、または gc.disable()を使用している場合にも重要です。 例えば:
フレームを維持したい場合(たとえば、後でトレースバックを印刷するため)、 frame.clear()メソッドを使用して参照サイクルを中断することもできます。
これらの関数のほとんどでサポートされているオプションの context 引数は、現在の行を中心として返されるコンテキストの行数を指定します。
- inspect.getframeinfo(frame, context=1)
- フレームまたはトレースバックオブジェクトに関する情報を取得します。 名前付きタプル
Traceback(filename, lineno, function, code_context, index)
が返されます。
- inspect.getouterframes(frame, context=1)
フレームとすべての外部フレームのフレームレコードのリストを取得します。 これらのフレームは、フレームの作成につながる呼び出しを表します。 返されるリストの最初のエントリはフレームを表します。 最後のエントリは、フレームのスタックの最も外側の呼び出しを表します。
バージョン3.5で変更: 名前付きタプル
FrameInfo(frame, filename, lineno, function, code_context, index)
のリストが返されます。
- inspect.getinnerframes(traceback, context=1)
トレースバックのフレームとすべての内部フレームのフレームレコードのリストを取得します。 これらのフレームは、フレームの結果として行われた呼び出しを表します。 リストの最初のエントリは traceback を表します。 最後のエントリは、例外が発生した場所を表します。
バージョン3.5で変更: 名前付きタプル
FrameInfo(frame, filename, lineno, function, code_context, index)
のリストが返されます。
- inspect.currentframe()
- 呼び出し元のスタックフレームのフレームオブジェクトを返します。
- inspect.stack(context=1)
呼び出し元のスタックのフレームレコードのリストを返します。 返されたリストの最初のエントリは、呼び出し元を表します。 最後のエントリは、スタックの最も外側の呼び出しを表します。
バージョン3.5で変更: 名前付きタプル
FrameInfo(frame, filename, lineno, function, code_context, index)
のリストが返されます。
- inspect.trace(context=1)
現在のフレームと、現在処理されている例外が発生したフレームとの間のスタックのフレームレコードのリストを返します。 リストの最初のエントリは発信者を表します。 最後のエントリは、例外が発生した場所を表します。
バージョン3.5で変更: 名前付きタプル
FrameInfo(frame, filename, lineno, function, code_context, index)
のリストが返されます。
属性を静的に取得する
getattr()と hasattr()はどちらも、属性の存在をフェッチまたはチェックするときにコードの実行をトリガーできます。 プロパティと同様に記述子が呼び出され、__getattr__()
および__getattribute__()
が呼び出される場合があります。
ドキュメントツールのように受動的なイントロスペクションが必要な場合、これは不便な場合があります。 getattr_static()は getattr()と同じ署名を持っていますが、属性をフェッチするときにコードの実行を回避します。
- inspect.getattr_static(obj, attr, default=None)
記述子プロトコル
__getattr__()
または__getattribute__()
を介して動的ルックアップをトリガーせずに属性を取得します。注:この関数は、getattrがフェッチできるすべての属性(動的に作成された属性など)を取得できない場合があり、getattrが取得できない属性(AttributeErrorを発生させる記述子など)を検出する場合があります。 また、インスタンスメンバーの代わりに記述子オブジェクトを返すこともできます。
インスタンス __ dict __ が別のメンバー(プロパティなど)によってシャドウされている場合、この関数はインスタンスメンバーを見つけることができません。
バージョン3.2の新機能。
getattr_static()は、Cで実装されたオブジェクトのスロット記述子やgetset記述子などの記述子を解決しません。 基になる属性の代わりに記述子オブジェクトが返されます。
次のようなコードでこれらを処理できます。 これらを呼び出す任意のgetset記述子の場合、コードの実行がトリガーされる可能性があることに注意してください。
ジェネレーターとコルーチンの現状
コルーチンスケジューラを実装する場合、およびジェネレータのその他の高度な使用法の場合、ジェネレータが現在実行中であるか、開始または再開または実行を待機しているか、またはすでに終了しているかを判断すると便利です。 getgeneratorstate()を使用すると、ジェネレーターの現在の状態を簡単に判別できます。
- inspect.getgeneratorstate(generator)
ジェネレータイテレータの現在の状態を取得します。
- 考えられる状態は次のとおりです。
GEN_CREATED:実行の開始を待機しています。
GEN_RUNNING:現在インタプリタによって実行されています。
GEN_SUSPENDED:現在yield式で一時停止されています。
GEN_CLOSED:実行が完了しました。
バージョン3.2の新機能。
- inspect.getcoroutinestate(coroutine)
コルーチンオブジェクトの現在の状態を取得します。 この関数は、 async def 関数によって作成されたコルーチンオブジェクトで使用することを目的としていますが、
cr_running
およびcr_frame
属性を持つコルーチンのようなオブジェクトを受け入れます。- 考えられる状態は次のとおりです。
CORO_CREATED:実行の開始を待機しています。
CORO_RUNNING:現在インタプリタによって実行されています。
CORO_SUSPENDED:現在await式で一時停止されています。
CORO_CLOSED:実行が完了しました。
バージョン3.5の新機能。
発電機の現在の内部状態も照会できます。 これは主に、内部状態が期待どおりに更新されていることを確認するためのテスト目的で役立ちます。
- inspect.getgeneratorlocals(generator)
ジェネレーターのライブローカル変数の現在の値へのマッピングを取得します。 変数名から値にマップする辞書が返されます。 これは、ジェネレーターの本体で locals()を呼び出すのと同じであり、すべて同じ警告が適用されます。
ジェネレーターがジェネレーターであり、現在フレームが関連付けられていない場合、空の辞書が返されます。 TypeError は、ジェネレーターがPythonジェネレーターオブジェクトでない場合に発生します。
バージョン3.3の新機能。
- inspect.getcoroutinelocals(coroutine)
この関数は getgeneratorlocals()に似ていますが、 async def 関数によって作成されたコルーチンオブジェクトに対して機能します。
バージョン3.5の新機能。
コードオブジェクトビットフラグ
Pythonコードオブジェクトにはco_flags
属性があります。これは、次のフラグのビットマップです。
- inspect.CO_OPTIMIZED
- コードオブジェクトは、高速ローカルを使用して最適化されます。
- inspect.CO_NEWLOCALS
- 設定されている場合、コードオブジェクトの実行時に、フレームの
f_locals
に対して新しいdictが作成されます。
- inspect.CO_VARARGS
- コードオブジェクトには、可変の位置パラメータ(
*args
のような)があります。
- inspect.CO_VARKEYWORDS
- コードオブジェクトには、可変キーワードパラメータ(
**kwargs
のような)があります。
- inspect.CO_NESTED
- コードオブジェクトがネストされた関数である場合、フラグが設定されます。
- inspect.CO_GENERATOR
- コードオブジェクトがジェネレーター関数の場合、つまりフラグが設定されます。 コードオブジェクトが実行されると、ジェネレータオブジェクトが返されます。
- inspect.CO_NOFREE
- 空き変数またはセル変数がない場合、フラグが設定されます。
- inspect.CO_COROUTINE
コードオブジェクトがコルーチン関数の場合、フラグが設定されます。 コードオブジェクトが実行されると、コルーチンオブジェクトが返されます。 詳細については、 PEP 492 を参照してください。
バージョン3.5の新機能。
- inspect.CO_ITERABLE_COROUTINE
フラグは、ジェネレーターをジェネレーターベースのコルーチンに変換するために使用されます。 このフラグを持つジェネレータオブジェクトは、
await
式で使用でき、yield from
コルーチンオブジェクトで使用できます。 詳細については、 PEP 492 を参照してください。バージョン3.5の新機能。
- inspect.CO_ASYNC_GENERATOR
コードオブジェクトが非同期ジェネレーター関数の場合、フラグが設定されます。 コードオブジェクトが実行されると、非同期ジェネレータオブジェクトが返されます。 詳細については、 PEP 525 を参照してください。
バージョン3.6の新機能。
ノート
フラグはCPythonに固有であり、他のPython実装では定義されていない場合があります。 さらに、フラグは実装の詳細であり、将来のPythonリリースで削除または非推奨になる可能性があります。 イントロスペクションのニーズには、 inspect モジュールのパブリックAPIを使用することをお勧めします。
コマンドラインインターフェイス
inspect モジュールは、コマンドラインからの基本的なイントロスペクション機能も提供します。
デフォルトでは、モジュールの名前を受け入れ、そのモジュールのソースを出力します。 代わりに、コロンとターゲットオブジェクトの修飾名を追加することで、モジュール内のクラスまたは関数を出力できます。
- --details
- ソースコードではなく、指定されたオブジェクトに関する情報を出力します