用几个不同的模块创建一个python模块

2024-09-27 21:34:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有几个不同的模块,我们正试图保持在不同的文件/模块为组织的目的,如果我们把它们都整合到一个单一的文件,这将创建一个怪物文件,将很难导航。但是,我们希望能够将它们导入到一个模块中,在该模块中我们可以调用所有相关函数,以便在脚本中轻松使用。你知道吗

作为我们努力实现的一个例子。你知道吗

结构中有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()

任何建议将不胜感激,因为我们是相当新的这种类型的模块工作。我们要确保我们是在做一个Python的方式,而不是只是黑客一起的东西。你知道吗


Tags: 模块文件frompyimportselfinitdef
1条回答
网友
1楼 · 发布于 2024-09-27 21:34:30

只要您不关心您没有执行“from 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]()

这段代码并没有完全经过测试,而是以文档形式在动态文件中通过字符串导入特定类的方法。你知道吗

相关问题 更多 >

    热门问题