19、【翻訳】モジュールinspect—Inspect live objects

7481 ワード

19、【翻訳】モジュールinspect—Inspect live objects
Pythonの公式ドキュメントから翻訳:29.12.inspect — Inspect live objects 
 
Inspect-アクティブなオブジェクトを確認します
inspectモジュールは、モジュール、クラス、メソッド、関数、遡及、フレームワークオブジェクト、コードオブジェクトなどのアクティブなオブジェクトに関する情報を取得するのに役立ついくつかの機能を提供します.たとえば、クラスの内容をチェックしたり、メソッドのソースコードを取得したり、関数のパラメータリストを抽出してフォーマットしたり、詳細な遡及を表示するために必要なすべての情報を取得したりするのに役立ちます.
このモジュールは、タイプチェック、ソースコードの取得、クラスと関数のチェック、および解釈スタックのチェックの4つの主要なサービスを提供します.
3、Signatureオブジェクトを使用して呼び出し可能なオブジェクトを内省する
3.3バージョンの新機能.
Signatureオブジェクトは、呼び出し可能なオブジェクトの呼び出し署名とその戻りコメントを表します.Signatureオブジェクトを取得するには、signature()関数を使用します.
inspect.signature(callable, *, follow_wrapped=True)
指定した呼び出し可能オブジェクトに対してSignatureオブジェクトを返します.
>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
...     pass

>>> sig = signature(foo)

>>> str(sig)
'(a, *, b:int, **kwargs)'

>>> str(sig.parameters['b'])
'b:int'

>>> sig.parameters['b'].annotation
<class 'int'>

一般関数とクラスからfunctoolsまで、さまざまなpython callablesを受け入れます.partial()オブジェクト.
署名を提供しない場合、ValueErrorが発生します.このタイプのオブジェクトがサポートされていない場合、TypeErrorが発生します.
3.5版新規:follow_wrappedパラメータ.Falseを渡して呼び出し可能なオブジェクトの署名を取得します(callable._wrapped__は装飾された呼び出し可能なオブジェクトを開くために使用されません).
注意:Pythonのいくつかの実装では、呼び出し可能なオブジェクトの一部が内省されていない可能性があります.例えば、CPythonでは、Cで定義されたいくつかの組み込み関数は、それらのパラメータに関するメタデータを提供しない.
 
class  inspect. Signature (parameters=None, *, return_annotation=Signature.empty)
Signatureオブジェクトは、関数の呼び出し署名とその戻りコメントを表します.関数が受け入れる各パラメータについて、そのパラメータセットにパラメータオブジェクトが格納されます.
オプションのparametersパラメータは、重複するパラメータがないことを保証するために検証され、パラメータの順序が正しい(たとえば、まずpositional-only、次にpositional-or-keyword)、およびデフォルト値のないパラメータが前に、デフォルト値の後にある一連のパラメータオブジェクトのシーケンスです.
オプションreturn_annotationパラメータは任意のPythonオブジェクトであり、値は呼び出し可能なオブジェクトの「戻り」コメントである.
Signatureオブジェクトは可変ではありません.Signatureを使用する.replace()は、変更後のコピーを取得します.
バージョン3.5で変更:署名オブジェクトは選択可能でソート可能です.
empty
戻りコメントが欠落していることを指定するための特殊なレベルタグです.
parameters
パラメータ名は、対応するパラメータオブジェクトの整列マッピングに適用されます.
return_annotation
オブジェクトの「戻る」コメントを呼び出すことができます.呼び出し可能なオブジェクトに「戻る」コメントがない場合、このプロパティはSignatureに設定されます.empty. bind (*args, **kwargs)
positionalパラメータとkeywordパラメータからparametersへのマッピングを作成します.*argsと**kwargsがsignatureに一致する場合、BoundArgumentsに戻ります.そうしないとTypeErrorが発生します.bind_partial (*args, **kwargs)
Signature.bind()の動作は同じですが、必要なパラメータ(functools.partial()の動作を模倣)を省略できます.BoundArgumentsを返します.入力されたパラメータが署名と一致しない場合、TypeErrorが発生します.replace (*[, parameters][, return_annotation])
 
呼び出したreplaceインスタンスに基づいて新しいSignatureインスタンスを作成します.異なるパラメータ(および/または)return_を渡すことができます.annotationは、基本署名の対応する属性を書き換えます.コピーしたSignatureからreturn_を削除するにはその情報を入力してくださいempty.
>>> def test(a, b):
...     pass
>>> sig = signature(test)
>>> new_sig = sig.replace(return_annotation="new return anno")
>>> str(new_sig)
"(a, b) -> 'new return anno'"

classmethod  from_callable (obj, *, follow_wrapped=True)
指定された呼び出し可能オブジェクトに対してSignature(またはそのサブクラス)オブジェクトを返します.follow_を渡すwrapped=Falseはオブジェクトの署名を取得し、それを開かない_wrapped__チェーン.この方法はSignatureのサブクラス化を簡略化する:
class MySignature(Signature):
    pass
sig = MySignature.from_callable(min)
assert isinstance(sig, MySignature)

 
class  inspect. Parameter (name, kind, *, default=Parameter.empty, annotation=Parameter.empty)
パラメータオブジェクトは可変です.パラメータを使用できます.Replace()は、パラメータオブジェクトを変更するのではなく、変更のコピーを作成します.
バージョン3.5で変更:Parameterオブジェクトは選択可能であり、ハッシュ可能である.
empty
デフォルト値とコメントの欠落を指定する特殊なレベルタグです.
name
parameterの名前は文字列です.この名前は有効なPython識別子でなければなりません.
CPython実装の詳細:CPythonは、理解およびジェネレータ式を実装するために使用されるコードオブジェクト上に、形式が.0の暗黙的なパラメータ名を生成する.
バージョン3.6で変更されました.これらのパラメータ名は、このモジュールから暗黙的0のような名前として公開されます.
default
パラメータの既定値.このパラメータにデフォルト値がない場合、この属性はParameterに設定.empty.
annotation
パラメータのコメント.このパラメータにコメントがない場合、この属性はParameterに設定.empty.
kind
パラメータ値がparameterにバインドされる方法を説明します.可能な値(パラメータ.KEYWORD_ONLYなど)は、パラメータからアクセスできます.
  POSITIONAL_ONLY
この値はpositionalパラメータとして指定する必要があります.Pythonではpositionalパラメータを明確に定義する構文はありませんが、多くの内蔵および拡張モジュール関数(特に1つまたは2つのパラメータのみを受け入れる関数)が受け入れられています.
  POSITIONAL_OR_KEYWORD
値はキーワードまたはpositionalパラメータとして提供できます(これはPythonで実現される関数の標準的なバインド動作です.)
  VAR_POSITIONAL
他のparameterのpositionalパラメータにバインドされていないメタグループ.これはPython関数定義の*argsパラメータに対応します.
  KEYWORD_ONLY
値はキーワードパラメータとして指定する必要があります.キーワードパラメータは、Python関数定義の*または*argsエントリの後にのみ表示されるパラメータです.
  VAR_KEYWORD
他のparameterのキーワードパラメータにバインドされていない辞書.これはPython関数定義の**kwargsパラメータに対応します.
たとえば、デフォルト値のないすべてのキーパラメータを印刷します.
>>> def foo(a, b, *, c, d=10):
...     pass

>>> sig = signature(foo)
>>> for param in sig.parameters.values():
...     if (param.kind == param.KEYWORD_ONLY and
...                        param.default is param.empty):
...         print('Parameter:', param)
Parameter: c

 
posted on
2018-04-15 22:52 Hello _ world読書(
...) コメント(
...) コレクションの編集
転載先:https://www.cnblogs.com/zwb8848happy/p/8849999.html