Python 使用';导入为';
在Python2.7中使用循环导入时遇到了一个问题 出于某些原因,我需要这个结构,这里简化为4个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
- 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解决了这个问题,没有进行代码更改。“我在使用循环导入时遇到了一个问题”-好的,第一个明显的建议是,不要使用循环导入。您认为您“需要此结构”,但很有可能您可以将其更改为不需要循环导入。可能有帮助: