从几个不同的模块中创建一个python模块

时间:2017-10-09 21:02:22

标签: python object module python-import

我们有几个不同的模块,我们试图将它们保存在单独的文件/模块中以用于组织目的,就好像我们将它们全部合并到一个文件中一样,它会创建一个很难导航的怪物文件。但是我们希望能够将它们导入到单个模块中,我们可以在其中调用所有相关的函数,以便在脚本中使用它们。

作为我们想要实现的目标的一个例子。

我们在结构中有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方式,而不仅仅是一起黑客攻击。

1 个答案:

答案 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]()

此代码未经过完全测试,但是在动态文件中按字符串导入特定类的文档化方式。