python循环导入和访问类

标签 python import dependencies circular-dependency

我是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.Boardpin.Pin 时,我将得到 my_board = store.get( board.Board, board_id) 它给了我这个错误

AttributeError:“模块”对象没有属性“Board”

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

澄清我的问题:

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

最佳答案

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

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

关于python循环导入和访问类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13038409/

相关文章:

python - Django + Mezzanine 中的翻译问题

python - 如何在 blender 中标记最后导入的 *obj

postgresql - 如何将 PostgreSQL 数据文件导入 Amazon redshift

java - 将 Android 模块从库切换到应用程序会导致 "Unable to resolve dependency for :app@debug/compileClasspath"/

java - Gradle 复合构建 - 您是否可以依赖于包含的多项目构建中的 java 子项目?

python - 如何更改 Python 中饼图切片的顺序

Python 模拟、django 和请求

gradle - 没有父目录的Grails 3(Gradle)依赖项

python - 业余编码器文件测试

regex - 通过CSV循环写入错误日志