2016-09-29 13 views
-1

チェスボードの場合、クラスがあり、squares属性を持つクラスがSquareのインスタンスであるとします。ファイル構造は、main.pyboard.pysquare.py、そして空の__init__.py(私は後者の目的を完全には理解していないと言わざるを得ないが...だがそれはやり方はやり方だと思う)。これらはすべて同じディレクトリにあります。 (私は以前に複数のファイルを含むPythonで何もしていませんでした。)インポートされたクラス内からインポートされたクラスを参照する

main.pyBoardオブジェクトをインスタンス化したいと思います。ここmain.pyの内容です:

from board import Board 
from square import Square 

board = Board() 

ここsquare.pyです:

class Square: 
    def __init__(self): 
     pass 
     #this class doesn't do anything yet 

、ここではboard.pyです:

class Board: 
    row_count = 8 
    column_count = 8 

    def __init__(self): 
     self.squares = self.generate_squares() 

    def generate_squares(self): 
     squares = {} 
     for i in range(0, self.row_count * self.column_count): 
      squares[i] = Square() 
     return squares 

私はmain.pyを実行したときしかし、私はsquares[i] = Square()上の誤差がありますことを告げますライン;つまりNameError: global name 'Square' is not definedです。

私はsquares[i] = square.Square()に変更しようとしましたが、同じエラーが発生します。

私はimport文を削除し、ちょうどmain.pyにクラス定義をコピーする場合それはimport文自身に関連しているまでの問題を正確に特定するので、その後のインスタンスは、正常に動作します。

+0

問題が何であるか把握するためにstacktraceを使用してください。 – postelrich

+1

あなたがそこでそれを使用しているならば、あなたは 'board square'の' square square'から 'square import'を取得する必要があります。 – zvone

答えて

0

main.pyでは両方のクラスをインポートしますが、BoardはSquareを見る方法がなく、逆もあります。 Boardクラスに "import square"を追加し、main.pyから削除します。

+0

ありがとうございます。しかし、そうでないようにする方法はありませんか?たった1つの 'include'ステートメントがその仕事をするPHPから来て、ファイルを含むPythonの方法は非常に畳み込まれているようです... – clb

+0

" import square "は必要ですが、Boardクラスに入れる必要があります。 main.pyはSquareに直接アクセスすることもできます。 –

関連する問題