分类档案: 命名空间

避免使用顶级导入进行多次读取

最近我’一直在与需要导入大型JSON定义文件的各种应用程序一起使用,这些文件定义了复杂的应用程序设置。通常,代码库中的多个辅助模块都需要这些文件。所有软件工程原理都指向仅一次导入此类文件,而不管其使用了多少个辅助模块。

我的本能方法是在文件中读取一个主处理程序模块,然后将其内容作为类初始化参数传递:

main_handler.py
蟒蛇
1
2
3
4
5
6
7
8
9
10
11
12
#main_handler.py
 
进口 json
 
模块1 进口 Class1
模块2 进口 Class2
 
打开(“ 设定.json”) f:
    设定 = json.加载(f)
 
init1 = Class1(设定=设定)
init2 = Class2(设定=设定)

问题是如果您有一个复杂的导入过程,并且要导入多个文件,它可能会开始看起来很凌乱。我最近发现,这种多重初始化参数方法不是’t实际上是必要的。

在Python中,您实际上可以在两个辅助模块(module1和module2)中导入相同的设置加载器模块,而python只会加载一次:

main_handler.py
蟒蛇
1
2
3
4
5
6
7
#main_handler.py
 
模块1 进口 Class1
模块2 进口 Class2
 
init1 = Class1()
init2 = Class2()

模块1.py
蟒蛇
1
2
3
4
5
6
7
#module1.py
 
进口 设定_loader
 
Class1:
    定义 __在里面__():
        .设定 = 设定_loader.设定

模块2.py
1
2
3
4
5
6
7
#module2.py
 
进口 设定_loader
 
Class2:
    定义 __在里面__():
        .设定 = 设定_loader.设定

设定_loader.py
蟒蛇
1
2
3
4
5
6
7
#settings_loader.py
 
进口 json
 
打开(“ 设定.json”) f:
    打印 “正在加载设置文件!”
    设定 = json.加载(f)

现在,当我们在终端中对此进行测试时:

终端输出
贝壳
1
2
3
4
5
MRMAC:进口测试 脆弱的$
MRMAC:进口测试 脆弱的$
MRMAC:进口测试 脆弱的$ 蟒蛇 main_handler.py
载入中 设定 文件!
MRMAC:进口测试 脆弱的$

尽管打电话 进口 设定_loader  两次,Python实际上只调用了一次。这是非常有用的,但是如果您实际上想两次导入文件,也可能引起头痛。如果是这样,那么我会将设置导入器包含在 __在里面__()  每个ClassX实例化两次。