导入模块列表
import a list of modules
我有一些插件系统,所有插件都可以简单地添加到一个文件夹中。
现在我手动导入它们,像这样:
# 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}')
我有一些插件系统,所有插件都可以简单地添加到一个文件夹中。
现在我手动导入它们,像这样:
# 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}')