Best way to enumerate classes in a module

Nick Craig-Wood nick at craig-wood.com
Thu Jun 25 12:30:03 EDT 2009


Carl Banks <pavlovevidence at gmail.com> wrote:
>  On Jun 23, 10:02 pm, Дамјан Георгиевски <gdam... at gmail.com> wrote:
> > I need to programmaticaly enumerate all the classes in a given module.
> > Currently I'm using dir(module) but the Notice on the documentation page
> > [1]  says "dir() is supplied primarily as a convenience for use at an
> > interactive prompt" so that kind of scares me.
> >
> > Is there a better approach?
> >
> > If there is, how do I get all the classes of the current module?
> 
>  You can use module.__dict__.values() (or .itervalues()) to retrieve
>  the contents of the module (and of course .keys() if you want names).
>  If you want to check the same module that the code appears in, use
>  globals() instead of module.__dict__.
> 
>  Something makes me think that module.__dict__ was only added to Python
>  fairly recently, but I'm not sure.

It exists in python2.1 - I don't have an older python to check at the
moment.

>  A word of warning (although I would guess you are already aware of
>  these issues, but for other readers): this method can't tell the
>  difference between a class defined in the module and a class imported
>  into it.
> 
>  Finally, despite the warning, I think you are ok to use dir() for that
>  purpose.  It's not likely to change.

Good advice...

And as a double check

>>> import sys
>>> set(sys.__dict__.keys()) == set(dir(sys))
True
>>> import os
>>> set(os.__dict__.keys()) == set(dir(os))
True

-- 
Nick Craig-Wood <nick at craig-wood.com> -- http://www.craig-wood.com/nick



More information about the Python-list mailing list