inspectモジュールを使って、モジュール内のクラス一覧を得る

いろんな機能をまとめたクラスが複数入っていてるモジュール、というかpyファイルから、そのクラス一覧を取得したい時にどうすれば調べていたらなんとか見つかったのでメモ。


まんまここから
inspect – Inspect live objects - Python Module of the Week

あるモジュールの中にある(ファイルで書かれている)クラスを取得するときに、inspectモジュールを使うといいそうです。
モジュールをインポートして、

inspect.getmembers(モジュール名とかオブジェクト名)
#__buildin__も出てきて焦る

でモジュール内のメンバ名と値(オブジェクト)が見れます。dir()の中身も全部出しちゃうぜバージョン。(というかdir()がメンバ名だけ出力するバージョン)
この時に__buildin__とかも出てくるのでかなり厄介です。名前を条件に始めますが、特殊なメソッドや値も弾きたい。単純にモジュール内のクラスだけを出したい。
そこで、getmembersメソッドの引数の2番目でisclassメソッドを入れることが出来るとか

inspect.getmembers(モジュール名とかオブジェクト名, inspect.isclass)
#モジュール内のクラス一覧だけがリストとして返る

ちゃんと公式のドキュメントの頭にも書かれていた。気が付かなくて恥ずかしい><
3.11.1 型とメンバ


ちなみに、これ以前の解決策としては、pyclbrを使ってクラス一覧を得る方法を考えてた。

pyclbr – Python クラスブラウザサポート - Python Module of the Week

これでも問題なく出来るけど、もともとIDEのクラスブラウズ機能のために使うものだろうから、なんかね・・・

余談

PyMOTWって結構いいですね。モジュールの使い方の例もあるし。日本語化も決行されてるので一度目を通しておこうっと。