我是Python新手,我正在谷歌搜索并阅读SO。
我有
pin.py:
from board import Board
class pin(object):
board_id = Int()
my_board = store.get(Board, board_id)
def __init__(self, val):
...
板.py:
from pin import Pin
class Board(object):
id = Int()
def __init__(self, val):
...
Board.pins = ReferenceSet(Board.id, Pin.board_id)
如您所见,我需要能够从其他类访问 Pin 和 Board。我看到here仅执行导入引脚
和导入板
。但是,当我这样做,然后在我的 pin.py 中执行 board.Board
或 pin.Pin
时,我将得到 my_board = store.get( board.Board, board_id)
它给了我这个错误
AttributeError:“模块”对象没有属性“Board”
当我有上面的代码时,这种情况没有发生,只是没有循环导入。
澄清我的问题:
如何进行循环导入并从导入的文件中调用类?
最佳答案
您问题的真正答案是“不要使用循环导入”。将两个模块需要的东西放入第三个模块中,或者将两个模块合并为一个。
为了更具体地说明您的情况与您链接的示例中发生的情况:您无法在循环导入彼此模块的顶级模块代码中安全地使用循环导入引用。正如您链接到的另一个问题已经解释的那样,您必须通过仅访问函数内部的模块内容来“保护”循环引用。如果您尝试直接从另一个模块使用每个模块(就像您正在做的那样),它将永远无法工作,因为两个模块在尝试使用另一个模块之前都无法完成运行,因此两个模块都不会永远完成运行。
关于python循环导入和访问类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13038409/