【Python】包路径不一致导致单例装饰器失效

问题描述

假如我有一个GlobalCache,使用了单例装饰器,然后在c1.py中导入:

from app.utils.cache_util import GlobalCache

 在c2.py中导入:

from utils.cache_util import GlobalCache

 在这种情况下即使GlobalCache使用了单例装饰器,那么创建出来的对象是不一致的。造成该问题的核心在于 Python 的模块缓存机制及其对模块路径的处理。不同路径下会认为两个不同的模块,将会创建一个新的模块。

官方文档中对模块缓存的解释:

5. The import system — Python 3.12.1 documentation

解决方案:

  • 使用绝对导入
  • 使用__init__.py来管理包导入

你可能感兴趣的:(后端,python)