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 解决了这个问题,没有更改代码。