我在模块中有许多不同的python文件。每个文件都有一个自己的列表,例如my_list = []
module
__init__.py
A.py # my_list = [1]
B.py # my_list = [2]
C.py # my_list = [3]
D.py # my_list = [4]
..
我想以编程方式合并所有文件中的列表并创建一个super_list [1,2,3,4]。
这是我尝试过的。
import importlib
module = importlib.import_module('module')
super_list = []
for file in ['A', 'B', 'C', 'D']:
super_list += getattr(module, file).my_list
这似乎有效。我遇到的问题是我需要在module.__init__.py
中添加导入A,B,C,D。
有没有更好的方法在python中做同样的事情。
答案 0 :(得分:0)
我会尝试在module.__init__
中有__all__
中的模块名称列表,这是允许 from module import *
和裸代码的标准行为导入和扩展super_list,例如:
# module.__init__
import importlib
__all__ = ['A', 'B', 'C', 'D'] # List of what to import for from module import *
super_list = []
for sub in __all__:
try:
m = importlib.import_module(sub)
super_list.extend(getattr(m, 'my_list'))
except ImportError:
pass # Ignore any import errors
__all__.append('super_list') # Add to the import * list
如果您不希望允许from module import *
,请使用__all__
以外的名称作为模块列表。
这会将模块特定行为置于所属的模块中,而不是在任何导入它的代码中。您可以使用glob
填充__all__
列表,但我不建议将其作为良好做法。
以上是未经测试的代码