在Python中,单例可以通过class __new__方法限制创建,也可以导入其他模块创建单例,但是在一个程序中,有多个模块导入同一个配置的时候,如果导入方式不对,则不会有单例效果,如:
目录
test
├── config
├──config.py
├── a.py
├── b.py
a.py
from config import config
import b
b.py
from test.config import config
config.py
print("config 初始化")
在test目录下有 a b两个模块,a导入b和config.config, b导入test.config.config,此时a和b中导入config的前缀不同,这种情况相当于a和b分别导入了不同的模块,是不会有单例的效果的
此时启动a.py的时候,会发现config 中的print被执行了两次
如果b.py中import改为
from config import config
会发现这时候就是单例效果了,config中的print只会被执行一次,推测应该是在Python导入模块的时候根据 from / import 导入文件的前缀进行匹配,而不是通过文件本身进行匹配