python循环导入和访问类

python循环导入和访问类,python,import,dependencies,circular-dependency,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

我是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。我看到只做
导入pin
导入板
。但当我这样做,然后我做
board.board
pin.pin
例如,在我的pin.py中,我将有
my_board=store.get(board.board,board_id)
它给我这个错误

AttributeError:'module'对象没有属性'Board'

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

为了澄清我的问题:


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

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


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

我的问题是如何从当前文件so store.get执行循环导入并调用另一个类(board.board,board_id)对我不起作用,因为board是要导入的文件,board是我要调用的文件中的类,所以不这样做通常是有意义的,但在这种情况下,我正在处理一对多关系,所以两个类(模型)都是需要能够互相访问,创建另一个模块只是将常用方法放在其中是没有意义的…有什么建议吗?@Meena:为什么这两个类首先在不同的模块中?嗯,所以我来自Ruby背景,不确定python是如何做到的。但是以ORM activeRecord的方式考虑它。我有引脚模型(数据库中的表格)和板模型(数据库中的表格)所以他们需要有自己的独立类,对应于表。所以我把它们放在独立的文件中…模块是指类还是指文件?你的意思是我应该把两个类放在同一个文件中吗?但是如果有一大堆一对多和多对多的关系,我们最终会得到一个大文件,里面满是类。这就是b吗是否在python中完成了?@Meena:模块是一个文件。与其他一些语言不同,在python中没有真正的理由将每个类放在自己的文件中。请注意,另一种可能性是将引用其他类的代码包装到一个方法中。然后,您可以成功地定义该类,然后调用该方法来设置关系代码导致问题的唯一原因是循环引用直接在类体中,而不是在函数/方法中。