In Python, given a module X and a class Y, how can I iterate or generate a list of all subclasses of Y that exist in module X?
Given the module foo.py
class foo(object): pass
class bar(foo): pass
class baz(foo): pass
class grar(Exception): pass
def find_subclasses(module, clazz):
for name in dir(module):
o = getattr(module, name)
try:
if issubclass(o, clazz):
yield name, o
except TypeError: pass
>>> import foo
>>> list(foo.find_subclasses(foo, foo.foo))
[('bar', ), ('baz', ), ('foo', )]
>>> list(foo.find_subclasses(foo, object))
[('bar', ), ('baz', ), ('foo', ), ('grar', )]
>>> list(foo.find_subclasses(foo, Exception))
[('grar', )]