2017-05-05 10 views
0

私は同じファイルに2つのクラスを持っています。私はClassBのからClassBのを呼び出すが、次のエラーが表示しようとしています:同じpythonファイルのクラスを使用

NameError:名「ClassBのは」

class A: 
    var = B(); 

class B: 
    def foo(self): 
+1

これは*クラス属性であるため、 'A'が定義されているときに作成されます。このとき、' B'はまだ定義されていません。最初に 'B'を定義してください。 – jonrsharpe

答えて

5

Class attributesが定義されていない(あなたが定義しようとしているA.var等)に評価されていますそれらのクラスが解析されて作成されるとき、は、それをclass Aの定義で参照しようとしているときには存在しません。

幸いにも、あなただけ後でそれを追加することができ、それは同じ効果を持ちます。

class A: 
    pass 

class B: 
    def foo(self): pass 

A.var = B() 

適切な場合は、インスタンスとして、それを定義することができます代わりに属性:

class A: 
    def __init__(self): 
     self.var = B() 

class B: 
    def foo(self): pass 
2

をクラスそれらが書かれた順に「見られる」。したがって、ファーストクラスのステートメントがある場合は、ファイル内のそれ以上に行く前に、その場で直接評価されます。

したがって、Pythonインタプリタの場合、クラスBが存在しない場合、var = B()というステートメントが実行されます。

この問題を解決するには2通りの方法があります。

  1. がクラスに前
  2. をクラスB を定義したり、
以下のようにクラスAのコンストラクタで声明 var = B() を置きます

クラスAは次のようになります

class A: 
    def __init__(self): 
     self.var = B() 

これはself.var = Bだけあなたがこのトピックはすでにスタックオーバーフローに何度か見られているクラスA

のインスタンスを作成するときに、私はあなたがそれらのいずれかに見てみることをお勧めして評価されることを意味します次のリンクでさらに質問がある場合は

Python class defined in the same file as another class - how do you get access to the one defined later in the file?

私はあなたがしたい場合の例としてお見せするrepl.itに小さなプログラムを作りました。それはhereです。

関連する問題