我有一些插件系统,所有插件都可以简单地添加到一个文件夹中。
现在我手动导入它们,如下所示:
# 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()
?
最佳答案
在main.py
中,您可以使用 exec
包含列表中元素的格式化字符串,例如:
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}')
关于python-3.x - 导入模块列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59138127/