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/

相关文章:

javascript - 如何缩小我个人的 jquery 前端微框架

Android gradle 错误 : All com. android.support 库必须使用完全相同的版本规范?

python - 如何将多个警告过滤器传递给 python -W?

python - 结构错误 : Fatal error: local() encountered an error (return code 2) while executing 'git commit -m ' message'

java - 如何将 '.jar'库文件导入Unity?

Python动态来自?

使用 Simpleframework 的 Gradle 构建错误

c# - 如何找到依赖于特定依赖项的特定版本?

python - 如何测试 gunicorn 配置文件语法

python - 是否可以让 Plotly choropleth 使用 ISO 3166-1 alpha-2 国家代码而不是 ISO 3166-1 alpha-3 来映射国家?