python循环导入和访问类

时间:2012-10-23 20:08:54

标签: python import dependencies circular-dependency

我是python的新手,我正在谷歌搜索并为此阅读。

我有

pin.py:

from board import Board
class pin(object):
  board_id = Int()
  my_board = store.get(Board, board_id)

  def __init__(self, val): 
    ...

board.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只能import pinimport board。但是当我这样做然后我在我的pin.py中board.Boardpin.Pin时我会my_board = store.get(board.Board, board_id)它会给我这个错误

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

当我使用上面的代码时,没有发生这种情况,但只是没有循环导入。

澄清我的问题:

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

1 个答案:

答案 0 :(得分:2)

您的问题的真正答案是“不要使用循环导入”。获取两个模块所需的东西并将其放入第三个模块,或将两个模块合并为一个。

更具体地说明您的情况与您链接的示例相比:您无法在循环导入其他模块的顶级模块代码中安全地使用循环导入引用。正如您所链接的另一个问题已经解释过,您必须通过仅访问函数内的模块内容来“保护”循环引用。如果你试图直接使用另一个模块,就像你在做的那样,它永远不会工作,因为在它试图使用另一个模块之前,这两个模块都不能完成运行,因此任何模块都不会永远获得完成运行。