python - 如何解决这个 Python 导入循环引用

标签 python python-3.x python-import python-module circular-reference

我有一个 JCheq 类,它有一个名为“logger”的静态变量。

JCheq 导入模块 printing_systems,但我需要使用 printing_systems 中的 JCheq.logger

import JCheq 放入 printing_systems.py 后,我的代码无法编译。

jcheq.py

from printing_systems import printing_systems
from logger import logger

class JCheq:
    logger = logger.Logger('logs/jcheq.log', loglevel=logger.Logger.INFO)

    def __init__(self):
        pass
    ...

打印系统/打印系统.py

from jcheq import JCheq
class WinLPR:

    def __init__(self):
        pass

    @staticmethod
    def send(spool, params):
        temp_dir = tempfile.mkdtemp()
        try:
            JCheq.logger.log('Creando archivo temporal en dir: ' + temp_dir, logger.Logger.TRACE)

错误轨迹:

Traceback (most recent call last):
  File "/home/jsivil/Desktop/Proyectos/UNPAZ/jcheq/jcheq/jcheq.py", line 12, in <module>
    from printing_systems import printing_systems
  File "/home/jsivil/Desktop/Proyectos/UNPAZ/jcheq/jcheq/printing_systems/printing_systems.py", line 7, in <module>
    from jcheq import JCheq
  File "/home/jsivil/Desktop/Proyectos/UNPAZ/jcheq/jcheq/jcheq.py", line 12, in <module>
    from printing_systems import printing_systems
ImportError: cannot import name 'printing_systems'

最佳答案

在函数中移动import语句通常用于解决循环导入。如果重构您的应用程序成本太高(如果有用的话),它会很方便。

另一种解决方案是将 JCheq.logger 移动到它自己的模块中,jcheq.pyprinting_systems/printing_systems.py 都将导入.

或者,您可以使 logger.Logger 成为由某个注册表支持的工厂函数(或简单地内存它),以便在给出相同参数时返回相同的记录器。这样,printing_system.py 将简单地导入 logger 而不是导入 jcheq

关于python - 如何解决这个 Python 导入循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36181476/

相关文章:

python-3.x - Opencv cuda python重新映射错误cv.cuda.remap(raw,mapx,mapy,cv.INTER_CUBIC,borderMode = cv.COLOR_RGB2GRAY)

python - 在 Windows 7 中导入 pymssql Unicode 解码错误

python - python中的递归重新加载() "from some_module import *"

python - Boost Threads 相当于Python 的threading.Event?

Python 数据类型与类?

python - 并行多维优化

python - 如何在Python中多次使用迭代器

python - python上的 latex :\alpha and\beta don't work?

即使登录后,Django 也会重定向到登录页面

python - 为什么 inspect.getfile 会给我一个不存在的文件?