myparentclass.__subclasses__() not working for me

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Mon Sep 14 11:16:44 EDT 2009


En Mon, 14 Sep 2009 10:30:07 -0300, samwyse <samwyse at gmail.com> escribió:

> ### I've tried this under both Python 2.5.1 and 3.1.1, and it isn't
> working with either one.  Here is my program:
>
> class Plugin(object):
>     """This is the base object for a plug-in."""
>     pass
>
> def load_plugins(plugin_subdir='plugins'):
>     import sys, pkgutil, imp, os.path
>
>     try:
>         # Use this path if we're running as a module.
>         homedir = __path__[0]
>     except NameError:
>         # Use this path if we're running stand-alone.
>         homedir = sys.path[0]
>     plugin_path = [ os.path.join(homedir, plugin_subdir) ]
>
>     modules = {}
>     for loader, name, is_pkg in pkgutil.iter_modules(plugin_path):
>         file, pathname, desc = imp.find_module(name, plugin_path)
>         modules[name] = imp.load_module(name, file, pathname, desc)
>     for pair in modules.items():
>         print('name = %r\nmodule = %r\n' % pair)
>
> if __name__ == '__main__':
>     print('subclasses = %r\n' %(Plugin.__subclasses__()))
>     load_plugins()
>     print('subclasses = %r\n' %(Plugin.__subclasses__()))
>
> ### And here is my plugin, in plugins/myplugin.py:
>
> from plugin import Plugin
> class MyPlugin(Plugin):
>     pass
>
> ### When I run the main program, I get this:
>
> subclasses = []
>
> name = 'myplugin'
> module = <module 'myplugin' from 'C:\Documents and Settings\sam_denton
> \Desktop\scripting\plugins\myplugin.py'>
>
> subclasses = []
>
> ###  Obviously, myplugin is being found found and loaded, but my base
> class doesn't know about it.  Any ideas?

Don't run the first module as a program itself. When it's run as a  
program, it's known as '__main__'; when someone executes 'import plugin'  
*another* copy is imported under the name 'plugin'.
So your plugin classes inherit from plugin.Plugin but you're printing  
__main__.Plugin subclasses.

-- 
Gabriel Genellina




More information about the Python-list mailing list