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): 
    ...

board.py:

from pin import Pin
class Board(object):
   id = Int()
   def __init__(self, val): 
     ...

Board.pins = ReferenceSet(Board.id, Pin.board_id)

ご覧のとおり、他のクラスからピンとボードの両方にアクセスできる必要があります。私はここでやることだけimport pinを見ましたimport board。しかし、それを実行してから実行すると、board.Boardたとえばpin.Pinpin.pyで、my_board = store.get(board.Board, board_id)このエラーが発生します

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

上記のコードを使用した場合、これは発生しませんでしたが、循環インポートはありませんでした。

私の質問を明確にするために:

循環インポートを実行し、インポートされるファイルからクラスを呼び出すにはどうすればよいですか?

4

1 に答える 1

2

あなたの質問に対する本当の答えは、「循環インポートを使用しないでください」です。両方のモジュールに必要なものを取り出して3番目のモジュールに入れるか、2つのモジュールを1つに結合します。

リンクした例と比較して、ケースで何が起こっているかをより具体的に説明すると、circularly-importing-each-otherモジュールのトップレベルモジュールコードで循環インポート参照を安全に使用することはできません。リンクした他の質問ですでに説明されているように、関数内のモジュールの内容にアクセスするだけで循環参照を「保護」する必要があります。各モジュールを他のモジュールから直接使用しようとすると、他のモジュールを使用しようとする前にどちらのモジュールも実行を終了できないため、どちらのモジュールも実行を終了できませ

于 2012-10-23T20:17:26.453 に答える