web-dev-qa-db-ja.com

Python 2.xでオブジェクトのイントロスペクションを実行するにはどうすればよいですか?

Python 2.xを使用していて、エーテルから呼び出しているオブジェクトがあります。そのドキュメントは特に明確ではありません。次のリストを取得できるようにしたいと思います。そのオブジェクトのプロパティと各プロパティのタイプ。

同様に、そのオブジェクトのメソッドのリストに加えて、引数の数やそれぞれのタイプなど、そのメソッドで見つけたその他の情報も取得したいと思います。

Google検索で正しい専門用語が欠落しているだけだと感じています。詳細を説明したいわけではありませんが、Active Directoryなので、いつも楽しいです。

24
Metahyperbolic

さて...あなたの最初の停止は単純なdir(オブジェクト)になります。これにより、フィールドとメソッドの両方のすべてのオブジェクトのメンバーが表示されます。インタラクティブなPythonシェルで試して、少し遊んでみてください。

例えば:

> class Foo:
   def __init__(self):
    self.a = "bar"
    self.b = 4711

> a=Foo()
> dir(a)
['__doc__', '__init__', '__module__', 'a', 'b']
25
unwind

次のようなものはどうですか?

>>> o=object()
>>> [(a,type(o.__getattribute__(a))) for a in dir(o)]
[('__class__', <type 'type'>), ('__delattr__', <type 'method-wrapper'>), 
('__doc__', <type 'str'>), ('__format__', <type 'builtin_function_or_method'>),
('__getattribute__', <type 'method-wrapper'>), ('__hash__', <type 'method-wrapper'>),
('__init__', <type 'method-wrapper'>), 
('__new__', <type 'builtin_function_or_method'>),
('__reduce__', <type 'builtin_function_or_method'>),
('__reduce_ex__', <type 'builtin_function_or_method'>),
('__repr__', <type 'method-wrapper'>), ('__setattr__', <type 'method-wrapper'>),
('__sizeof__', <type 'builtin_function_or_method'>),
('__str__', <type 'method-wrapper'>),
('__subclasshook__', <type 'builtin_function_or_method'>)]
>>> 

より構造化された方法は、 モジュールの検査 を使用することです。

Inspectモジュールは、モジュール、クラス、メソッド、関数、トレースバック、フレームオブジェクト、コードオブジェクトなどのライブオブジェクトに関する情報を取得するのに役立ついくつかの便利な関数を提供します。たとえば、クラスの内容を調べたり、メソッドのソースコードを取得したり、関数の引数リストを抽出してフォーマットしたり、詳細なトレースバックを表示するために必要なすべての情報を取得したりするのに役立ちます。

9
gimel

" Guide to Python introspection "は、始めるのに最適な記事です。

5
Akbar ibrahim

モジュールの検査 を見ることができます。ライブオブジェクトやソースコードを検査するためのさまざまなツールを提供します。

4
SilentGhost

Win32com.client.Dispatchを使用している場合、Pythonオブジェクトは、IDispatchの汎用ラッパーであるため、あまり役に立たない可能性があります。

makepyActivestate Python に付属)を使用して、型ライブラリからPythonラッパーを生成できます。次に、ラッパーのコード。