我们有几个不同的模块,我们试图将它们保存在单独的文件/模块中以用于组织目的,就好像我们将它们全部合并到一个文件中一样,它会创建一个很难导航的怪物文件。但是我们希望能够将它们导入到单个模块中,我们可以在其中调用所有相关的函数,以便在脚本中使用它们。
作为我们想要实现的目标的一个例子。
我们在结构中有n个文件:
# module1.py
class Module1():
def __init__(self, file):
self.file = load.file
def get_item_from_file():
return self.file['path']['to']['item']
我们希望拥有一个
的文件# all_modules.py
from module1 import Module1
from moduleN import ModuleN
class AllModules():
def __init__(self,file):
self.file = load.file
# Some magic to instantiate all the functions in Module1-N
# so they can be instantiated by making an AllModules object
换句话说,我们希望能够使用上述模块如下
#Somescript.py
from all_modules import AllModules
file = some_file_input
test = AllModules(file)
item_in_file = test.get_item_from_file()
任何建议都会受到赞赏,因为我们对这类模块工作还很陌生。我们希望确保我们这样做是一种pythonic方式,而不仅仅是一起黑客攻击。
答案 0 :(得分:0)
只要你不关心你没有做过"来自moduleX import ModuleX"语句,你可以做基于字符串的导入。
import importlib
def my_import(name):
components = name.split('.')
mod = __import__(components[0])
for comp in components[1:]:
mod = getattr(mod, comp)
return mod
imports = []
for root, dirs, files in os.walk(rootdir):
for f in files:
if f.startswith("module"):
# find module number magic.
imports.apppend(my_import(f.replace('.py', '') + ".module" + str(modulenumber))
然后,通过
引用模块class_instance = imports[i]()
此代码未经过完全测试,但是在动态文件中按字符串导入特定类的文档化方式。