如何解决此 Python 导入循环引用
How to solve this Python import circular reference
我有一个 class 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
...
printing_systems/printing_systems.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.py
和 printing_systems/printing_systems.py
都将导入的自己的模块中。
或者,您可以使 logger.Logger 成为某个注册表支持的工厂函数(或简单地记忆它),以便在给出相同参数时它 returns 成为相同的记录器。这样,printing_system.py
将简单地导入 logger
而不是导入 jcheq
.
我有一个 class 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
...
printing_systems/printing_systems.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.py
和 printing_systems/printing_systems.py
都将导入的自己的模块中。
或者,您可以使 logger.Logger 成为某个注册表支持的工厂函数(或简单地记忆它),以便在给出相同参数时它 returns 成为相同的记录器。这样,printing_system.py
将简单地导入 logger
而不是导入 jcheq
.