Dave Challis wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > I'm trying to write some code which: > 1. Finds all modules in a plugin directory > 2. Imports those modules > 3. Creates an instance of each object defined in the module (each module > will contain exactly 1 object, which is a subclass of 'Plugin') > > The closest I've come so far is with something like: > > In plugin.py: > # taken from http://docs.python.org/lib/built-in-funcs.html > def my_import(name): > mod = __import__(name) > components = name.split('.') > for comp in components[1:]: > mod = getattr(mod, comp) > return mod > > def import_plugins(): > mods = [] > for filename in os.listdir('/plugins'): > if filename.endswith('.py'): > name = os.path.splitext(filename)[0] > mods.append(my_import('plugins.' + name)) > return mods > > class Plugin(object): > pass > > > In plugins/exampleplugin.py: > class ExamplePlugin(Plugin): > def __init__(self): > pass > > > Calling import_plugins() then gives me a list containing references to > modules. > > How can I loop through that list and create an instance of whatever > object was defined within the module? (In this case I'd want to > construct an instance of ExamplePlugin)
Like this: for name in dir(plugin): thing = getattr(plugin, name) try: if issubclass(thing, Plugin): thing() except ValueError: # issubclass sucks pass Diez -- http://mail.python.org/mailman/listinfo/python-list