4

モジュールmoduleとクラスが与えられた場合、で定義されたMyClassすべてのサブクラスのリストを取得する方法は?MyClassmodule

4

4 に答える 4

8

inspect.getmembers()を使用できます。あなたが持っていると仮定しますmymodule.py

class A(object):
    pass


class B(A):
    pass


class C(A):
    pass

のすべてのサブクラスを取得する方法は次のAとおりです。

import inspect
import mymodule
from mymodule import A

def is_subclass(o):
    return inspect.isclass(o) and issubclass(o, A)


print inspect.getmembers(mymodule, predicate=is_subclass)

または、短いlambda形式で:

print inspect.getmembers(mymodule,  
                         predicate=lambda o: inspect.isclass(o) and \
                                             issubclass(o, A))
于 2013-09-24T09:35:03.923 に答える
1
classes = ()
for name in dir(module):
    obj = getattr(module, name)
    try:
        # obj.__mro__ raises AttributeError on non-class
        if MyClass in obj.__mro__ and obj is not MyClass:
            classes += (obj,)
        #else:
        #    print name, "is no subclass of", MyClass
    except AttributeError:
        #print name, "is no class"
        pass  # you might of course use an if hasattr(obj, '__mro__') instead

きれいではありませんが、機能します。ただし、代替は大歓迎です...

于 2013-09-24T09:24:27.943 に答える
0

おそらくpyclbrモジュールを試してみてください — Pythonクラスのブラウザサポート

http://pymotw.com/2/pyclbr/

于 2013-09-24T09:49:29.220 に答える