Python class 使用 'IMPORT AS' 在不同文件中实例循环引用
Python class instance circular referencing in different files using 'IMPORT AS'
我在 Python 2.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()
class1.py :
import folder.loader as LD
class Class1():
def __init__(self):
self.pty1=0
def change_class2(self):
LD.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
执行的代码是main.py
。此脚本调用文件 loader.py
为 Class1 和 Class2 创建一个实例。实例必须相互通信和修改,解释文件 loader.py
.
的必要性(如果我没记错的话)
执行此代码 returns 来自 class1.py
的错误:
import folder.loader as LD
AttributeError: 'module' object has no attribute 'loader'
我不知道这里发生了什么。
令人惊讶的是,当我从 classes 文件的导入命令行中删除部分 as LD
时,它工作得很好 :
class1.py :
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
class Class2():
def __init__(self):
self.pty2=0
def change_class1(self):
folder.loader.a.pty1=6
对于这个例子,没问题,但是在我尝试制作的真实程序中,基于这个结构,我不能每次需要与另一个通信时都使用完整的模块路径class实例。
为什么会出现此错误?我能做些什么来解决这个问题?
预先感谢您的帮助。
编辑:现在用 from .. import loader as LD
替换 import folder.loader as LD
returns 另一个错误,我不明白:
from .. import loader as LD
ImportError: cannot import name loader
我简单地使用 Python 3 解决了这个问题,没有更改代码。
我在 Python 2.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()
class1.py :
import folder.loader as LD
class Class1():
def __init__(self):
self.pty1=0
def change_class2(self):
LD.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
执行的代码是main.py
。此脚本调用文件 loader.py
为 Class1 和 Class2 创建一个实例。实例必须相互通信和修改,解释文件 loader.py
.
执行此代码 returns 来自 class1.py
的错误:
import folder.loader as LD
AttributeError: 'module' object has no attribute 'loader'
我不知道这里发生了什么。
令人惊讶的是,当我从 classes 文件的导入命令行中删除部分 as LD
时,它工作得很好 :
class1.py :
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
class Class2():
def __init__(self):
self.pty2=0
def change_class1(self):
folder.loader.a.pty1=6
对于这个例子,没问题,但是在我尝试制作的真实程序中,基于这个结构,我不能每次需要与另一个通信时都使用完整的模块路径class实例。
为什么会出现此错误?我能做些什么来解决这个问题? 预先感谢您的帮助。
编辑:现在用 from .. import loader as LD
替换 import folder.loader as LD
returns 另一个错误,我不明白:
from .. import loader as LD
ImportError: cannot import name loader
我简单地使用 Python 3 解决了这个问题,没有更改代码。