LoginSignup
15
11

More than 5 years have passed since last update.

[python] モジュールに定義されているクラス一覧を取得する

Last updated at Posted at 2015-10-15

inspect.getmembers(object[, typecheck])

まずは結論から

foo.py
class foo1:
    '''something code'''

class foo2:
    '''something code'''

class foo3:
    '''something code'''
get_class
import foo 
import inspect

classes = map(lambda x:x[0],inspect.getmembers(foo,inspect.isclass))

print classes
# => ['foo1','foo2','foo3']

inspect.getmembers(object)objectに登録されているオブジェクトの全メンバーを取得します。
形式は[(member1,type),(member2,type),....]といった形。
inspect.is--はそのオブジェクトが--に一致するかを判定するもので、
class, module, function, method .....と16個あるらしい。
詳しくはこちら

そのため、inspect.getmembers(foo,inspect.isclass)でこんな形になっていたはず。

get_class
print inspect.getmembers(foo,inspect.isclass)
# => [('foo1',<class foo.foo1 at 0x*******>),('foo1',<class foo.foo2 at 0x*******>),('foo3',<class foo.foo3 at 0x*******>)]

あとは各要素の第0要素だけ抜き出してあげればいいので
map(lambda x:x[0], list)
でおしまい。

第1要素の方はクラスそのものだから、クラスオブジェクトそのものも取得できる。
例えばクラス名の一部をkeyに検索をかけて、一致するクラスオブジェクトを取得するとする。

getclass
import foo 
import inspect

classes = inspect.getmembers(foo,inspect.isclass)

for i in classes:
    if '2' in i[0]:
        something2 = i[1]

something2class = something2()
print something2class.__class__.__name__
# => foo2

ただしこの場合、検索に引っかからないとたぶんエラーが出る。

15
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
11