私は同じファイルに2つのクラスを持っています。私はClassBのからClassBのを呼び出すが、次のエラーが表示しようとしています:同じpythonファイルのクラスを使用
NameError:名「ClassBのは」
class A:
var = B();
class B:
def foo(self):
私は同じファイルに2つのクラスを持っています。私はClassBのからClassBのを呼び出すが、次のエラーが表示しようとしています:同じpythonファイルのクラスを使用
NameError:名「ClassBのは」
class A:
var = B();
class B:
def foo(self):
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
をクラスそれらが書かれた順に「見られる」。したがって、ファーストクラスのステートメントがある場合は、ファイル内のそれ以上に行く前に、その場で直接評価されます。
したがって、Pythonインタプリタの場合、クラスBが存在しない場合、var = B()
というステートメントが実行されます。
この問題を解決するには2通りの方法があります。
var = B()
を置きます クラスAは次のようになります
class A:
def __init__(self):
self.var = B()
これはself.var = B
だけあなたがこのトピックはすでにスタックオーバーフローに何度か見られているクラスA
のインスタンスを作成するときに、私はあなたがそれらのいずれかに見てみることをお勧めして評価されることを意味します次のリンクでさらに質問がある場合は
私はあなたがしたい場合の例としてお見せするrepl.itに小さなプログラムを作りました。それはhereです。
これは*クラス属性であるため、 'A'が定義されているときに作成されます。このとき、' B'はまだ定義されていません。最初に 'B'を定義してください。 – jonrsharpe