Open3
python inspect詳細

Pythonでは組み込みのinspectモジュールを使うことでオブジェクトの情報を得ることが可能。
ドキュメントの自動生成などにもこれが使われているらしい

# numpyモジュールのメンバ一覧を取得
member_list = inspect.getmembers(numpy)
for member in member_list:
print(member)
- memberは(name, value)という形式のタプル
- nameはstr
- valueは色々な型が入る
変数
('ALLOW_THREADS', 1)
2つ目が定数
class
('AxisError', <class 'numpy.AxisError'>)
クラス定義
function
('where', <function where at 0x000001927814E9D0>)
関数定義
module
('warnings', <module 'warnings' from 'warnings.py'>)
モジュール
built-in function
('array', <built-in function array>)
組み込み関数?

メンバ関数
inspect.signature(<function>)で引数やアノテーションの情報を得られる
def func1():
pass
signature = inspect.signature(func1)
signature.return_annotation
で返り値の型アノテーションを得られる
def hoge():
pass
print(inspect.signature(hoge).return_annotation)
# -> <class 'inspect._empty'>
def hoge() -> int:
pass
print(inspect.signature(hoge).return_annotation)
# -> <class 'int'>
signature.parameters
で引数一覧を得られる。構造はOrderedMapで、キーが引数名(str)、値がinspect.Parameterオブジェクトである。
inspect.Parameterは引数1つの情報を持っている。
- Parameter.name: str -> 引数名
- Parameter.default -> 引数のデフォルト値
- Parameter.annotation -> 引数の型アノテーション
- Parameter.kind -> 引数の分類
- Parameter.POSITIONAL_ONLY -> 位置限定引数(/の後に出てくるやつら)
- Parameter.POSITIONAL_OR_KEYWORD -> 通常の引数
- Parameter.VAR_POSITIONAL -> 可変長引数(*args)
- Parameter.KEYWORD_ONLY -> キーワード限定引数(*の後に出てくるやつら)
- Parameter.VAR_KEYWORD -> 可変キーワード引数(**kwargs)