我有一个工作代码,但我想知道什么是适当的Pythonic方法。
我的目标:拥有一个“插件”目录(每个插件一个模块),在程序运行时动态加载。所有模块都将定义一个函数,它将充当“入口点”。
目标是拥有一个可以通过一些额外功能轻松扩展的脚本。
我想出的是以下内容。在这种情况下 reporter = plugin 。
import os
import importlib
import reporters # Package, where plugins (reporters) will reside
def find_reporters():
# Find all modules in directory "reporters" which look like "*_reporter.py"
reporters = [rep.rsplit('.py', 1)[0] for rep in os.listdir('reporters') if rep.endswith('_reporter.py')]
functions = []
for reporter in reporters:
module = importlib.import_module('.' + reporter, 'reporters')
try:
func = getattr(module, 'entry_function') # Read the entry_function if present
functions.append(func) # Add the function to the list to be returned
except AttributeError as e:
print(e)
return functions
def main():
funcs = find_reporters()
for func in funcs:
func() # Execute all collected functions
我对Python不太专业,所以这是一个可以接受的解决方案吗?