1

我是 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。我看到这里只做import pinand import board。但是当我这样做然后我这样做board.Board或者pin.Pin例如在我的 pin.py 中我会得到my_board = store.get(board.Board, board_id)它给我这个错误

AttributeError: 'module' object has no attribute 'Board'

当我有上面的代码时,这并没有发生,只是没有循环导入。

为了澄清我的问题:

如何进行循环导入并从正在导入的文件中调用类?

4

1 回答 1

2

您问题的真正答案是“不要使用循环导入”。将两个模块都需要的东西放在第三个模块中,或者将两个模块合二为一。

要更具体地了解您的案例与您链接的示例的情况:您不能在循环导入彼此模块的顶级模块代码中安全地使用循环导入引用。正如您链接到的另一个问题已经解释的那样,您必须通过仅访问函数内部的模块内容来“保护”循环引用。如果您尝试直接从另一个模块使用每个模块,就像您正在做的那样,它将永远无法工作,因为在尝试使用另一个模块之前,两个模块都无法完成运行,因此两个模块都不会完成运行。

于 2012-10-23T20:17:26.453 回答