我有一些插件系统,可以将所有插件简单地添加到文件夹中。
现在,我手动导入它们,就像这样:
# main.py
from modules.AA import aa
from modules.BB import bb
from modules.CC import cc
from modules.DD import dd
...
但是我想使其更具动态性,因此我可以将所有内容导入列表['aa', 'bb', 'cc', 'dd',... ]
文件夹结构:
main.py
/modules/__init__.py
/modules/AA.py
/modules/BB.py
/modules/CC.py
...
我可以将其添加到
__init__.py
:__all__ = ['aa', 'bb', 'cc', 'dd']
但是我必须调用类似AA.aa()
的函数
简单地能够呼叫aa()
需要什么?
答案 0 :(得分:2)
在main.py
中,可以对列表中包含元素的格式化字符串使用was released at Jan 5, 2013,例如:
attributes = ['aa', 'bb', 'cc', 'dd']
for attribute in attributes:
exec(f'from modules.{attribute.upper()} import {attribute}')
如果不能从属性名称中导出模块名称,则当然可以使用单独的列表(如果需要,可以使用dict
):
modules = ['AA', 'BB', 'CC', 'DD']
attributes = ['aa', 'bb', 'cc', 'dd']
for module, attribute in zip(modules, attributes):
exec(f'from modules.{module} import {attribute}')