> Is there a method or attribute I can use to get a list of
classes defined or in-use within my python program? I tried
using pyclbr and readmodule but for reason that is dogslow.
Well, given that so much in python is considered a class, the
somewhat crude code below walks an object/module and emits
details regarding what's going on. I couldn't find any nice
method for determining if a variable referenced a module other
than checking to see if that item had both a "__file__" and a
"__name__" attribute. Likewise, the check for whether something
is an object is a bit crude.
def inspect(thing, name = '', indent=0):
.... if hasattr(thing, "__file__") and hasattr(thing, "__name__"):
.... #assume it's a module
.... print "%sModule %s" % ("\t" * indent, thing.__name__)
.... for subthing in dir(thing):
.... objname = ".".join([name,
subthing]).lstrip(".")
.... inspect(eval(objname),
.... objname, indent+1)
.... elif isinstance(thing, object):
.... print "%s%s is an object" % ("\t" * indent, name)
.... import m1
# m1 is a junk module that references module "m2" and has
# some junk classes in it
inspect(m1, "m1")
Module m1
m1.M1Class is an object
m1.M1ObjectClass is an object
m1.__builtins__ is an object
m1.__doc__ is an object
m1.__file__ is an object
m1.__name__ is an object
Module m2
m1.m2.M2Class is an object
m1.m2.M2ObjectClass is an object
m1.m2.__builtins__ is an object
m1.m2.__doc__ is an object
m1.m2.__file__ is an object
m1.m2.__name__ is an object
You could also filter out builtin object properties by wrapping
that last print statement in something like
if not name.startswith("_"): print ...
which might cut down on some of the noise.
Just a few ideas.
-tkc