python - 将所有模块导入一个文件夹中,并通过其属性之一使用它们

标签 python import

我正在尝试构建一个可模块化的应用程序,因此我需要一种方法来允许我在不修改主应用程序的情况下创建新模块。为此,我正在准备允许我从文件夹中导入所有模块的模块系统,并且我想选择要使用的模块,例如,通过使用类属性。

模块:

topology_O.py:

class Topology(object):
    def __init__(self):
        self.name = 'O'
        self.version = 0.1

    def __str__(self):
        string = "Topology: " + self.name
        string += "Version: " + str(self.version)
        return string

topology_H.py:

class Topology(object):
    def __init__(self):
        self.name = 'H'
        self.version = 0.1

    def __str__(self):
        string = "Topology: " + self.name
        string += "\n > Version: " + str(self.version)
        return string

我想像这样使用它们:

myTopology = some_topology_thing('O')
print  myTopology
# Topology: O
#  > Version: 0.1

myTopology = some_topology_thing('H')
print  myTopology
# Topology: H
#  > Version: 0.1

所以模块将被name选择和使用。

最佳答案

importlib可以在这里提供帮助:

import importlib

def some_topology_thing(topo_type):
    mod = importlib.import_module('topology_{}'.format(topo_type))
    return mod.Topology()

关于python - 将所有模块导入一个文件夹中,并通过其属性之一使用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36631458/

相关文章:

python - 从Python中的API展平嵌套的json

java - IDREF 属性只能有本地 ID 值吗?

python - 从编译输出动态导入运行时指定的模块

python - 在Python中使用大型数据集进行OOP的好方法

import - Rust 有重命名的 "use foo::*"吗?

import - 为什么 Erlang 既为模块提供 `import`,又为 header 提供 `include`?

javascript - React 从导入中消除点

Python Selenium 网络驱动程序。写我自己的预期条件

python - 如果另一个失败,pytest 可以运行测试吗?

python - 基于组的Django admin is_staff