該inspect
模塊可能會幫助你。下面是我編寫的一個插件管理器類中的一些代碼,可以作爲示例。
def load_plugin_file(self, pathname):
'''Return plugin classes in a plugin file.'''
name, ext = os.path.splitext(os.path.basename(pathname))
f = file(pathname, 'r')
module = imp.load_module(name, f, pathname,
('.py', 'r', imp.PY_SOURCE))
f.close()
plugins = []
for dummy, member in inspect.getmembers(module, inspect.isclass):
if issubclass(member, Plugin):
p = member(*self.plugin_arguments,
**self.plugin_keyword_arguments)
if self.compatible_version(p.required_application_version):
plugins.append(p)
return plugins
的另一種方式做到這一點可能是使用內建函數globals
,issubclass
和isinstance
。
@Max Shawabkeh:謝謝你的糾正。我正在考慮'__dict__'和'values',我做了那個愚蠢的錯誤。 – 2010-04-29 09:31:43