Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用';导入为';_Python_Python Import_Importerror_Circular Dependency_Circular Reference - Fatal编程技术网

Python 使用';导入为';

Python 使用';导入为';,python,python-import,importerror,circular-dependency,circular-reference,Python,Python Import,Importerror,Circular Dependency,Circular Reference,在Python2.7中使用循环导入时遇到了一个问题 出于某些原因,我需要这个结构,这里简化为4个python文件: - main.py - folder \- __init__.py \- loader.py \- folder1 \- __init__.py \- class1.py \- folder2 \- __init__.py \- class2.py main.py: import folder.loader as LD L

在Python2.7中使用循环导入时遇到了一个问题

出于某些原因,我需要这个结构,这里简化为4个python文件:

- main.py
- folder
  \- __init__.py
  \- loader.py
  \- folder1
     \- __init__.py
     \- class1.py
  \- folder2
     \- __init__.py
     \- class2.py
main.py:

import folder.loader as LD

LD.a.change_class2()
LD.b.change_class1()
loader.py:

from folder1.class1 import Class1
from folder2.class2 import Class2

a=Class1()
b=Class2()
类别1.py:

import folder.loader as LD

class Class1():
    def __init__(self):
        self.pty1=0
    def change_class2(self):
        LD.b.pty2=2
import folder.loader

class Class1():
    def __init__(self):
        self.pty1=0
    def change_class2(self):
        folder.loader.b.pty2=2
class2.py:

import folder.loader as LD

class Class2():
    def __init__(self):
        self.pty2=0
    def change_class1(self):
        LD.a.pty1=6
import folder.loader

class Class2():
    def __init__(self):
        self.pty2=0
    def change_class1(self):
        folder.loader.a.pty1=6
执行的代码是
main.py
。该脚本调用文件
loader.py
,该文件为Class1和Class2创建一个实例。实例必须相互通信和修改,解释文件
loader.py
的必要性(如果我没有错的话)

执行此代码将返回
class1.py
中的错误:

    import folder.loader as LD
AttributeError: 'module' object has no attribute 'loader' 
我不知道这里发生了什么事

令人惊讶的是,当我从类文件中的importion命令行中删除部分
as LD
时,它运行良好:

类别1.py:

import folder.loader as LD

class Class1():
    def __init__(self):
        self.pty1=0
    def change_class2(self):
        LD.b.pty2=2
import folder.loader

class Class1():
    def __init__(self):
        self.pty1=0
    def change_class2(self):
        folder.loader.b.pty2=2
class2.py:

import folder.loader as LD

class Class2():
    def __init__(self):
        self.pty2=0
    def change_class1(self):
        LD.a.pty1=6
import folder.loader

class Class2():
    def __init__(self):
        self.pty2=0
    def change_class1(self):
        folder.loader.a.pty1=6
对于这个例子,这是可以的,但是在我尝试制作的实际程序中,基于这个结构,我不能每次需要与另一个类实例通信时都使用完整的模块路径

为什么我会犯这个错误?我能做些什么来解决这个问题? 提前感谢您的帮助


编辑:将
import folder.loader替换为LD
from。。导入加载程序为LD现在返回另一个错误,我不理解:

    from .. import loader as LD
ImportError: cannot import name loader

我只使用Python 3解决了这个问题,没有进行代码更改。

“我在使用循环导入时遇到了一个问题”-好的,第一个明显的建议是,不要使用循环导入。您认为您“需要此结构”,但很有可能您可以将其更改为不需要循环导入。可能有帮助: