import types class Plugin(object): pass def getPlugins(subclassof=Plugin): import sys, os dirname = os.path.join(sys.path[0], *__path__) files = os.listdir(dirname) modules = filter(lambda f: f.split('.')[-1] in ('py', 'pyc') and not f.startswith('__'), files) modulenames = set(['.'.join(filename.split('.')[:-1]) for filename in modules]) ret = [] for modulename in modulenames: module = __import__(modulename, globals(), locals(), ['plugins']) for obj in [getattr(module, x) for x in dir(module)]: if type(obj) == type and issubclass(obj, subclassof): ret.append(obj) return ret