How can I get a list of all classes within current module in Python?
g = globals().copy() for name, obj in g.iteritems():
I've seen plenty of examples of people extracting all of the classes from a module, usually something like:
# foo.py class Foo: pass # test.py import inspect import foo for name, obj in inspect.getmembers(foo): if inspect.isclass(obj): print obj
But I can't find out how to get all of the classes from the current module.
# foo.py import inspect class Foo: pass def print_classes(): for name, obj in inspect.getmembers(???): # what do I do here? if inspect.isclass(obj): print obj # test.py import foo foo.print_classes()
This is probably something really obvious, but I haven't been able to find anything. Can anyone help me out?
Another solution which works in Python 2 and 3:
#foo.py import sys class Foo(object): pass def print_classes(): current_module = sys.modules[__name__] for key in dir(current_module): if isinstance( getattr(current_module, key), type ): print(key) # test.py import foo foo.print_classes()
import pyclbr print(pyclbr.readmodule(__name__).keys())
Note that the stdlib's Python class browser module uses static source analysis, so it only works for modules that are backed by a real