我在同一个文件中有两个类。我想打电话给ClassB的ClassB的距离,但收到以下错误:在同一个python文件中使用一个类
NameError:名字“ClassB的”没有定义
class A:
var = B();
class B:
def foo(self):
我在同一个文件中有两个类。我想打电话给ClassB的ClassB的距离,但收到以下错误:在同一个python文件中使用一个类
NameError:名字“ClassB的”没有定义
class A:
var = B();
class B:
def foo(self):
Class attributes(如A.var
你试图定义)进行评估当他们的类被解析和创建时,当你试图在class A
的定义中引用它时,B()
将不存在。
幸运的是,你可以添加它之后,它会产生同样的效果:
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
的类按其写入顺序“看到”。因此,如果您在第一堂课中有一个陈述,那么在进一步阅读文件之前,将直接对其进行评估。
因此,您的陈述var = B()
因为Python解释器的类B尚不存在而被执行。
有2种方法来解决这个问题:
var = B()
A类的构造如下图所示您的A级看起来像这样
class A:
def __init__(self):
self.var = B()
这意味着,当您创建的类A
本主题已经看到堆栈溢出多次的实例self.var = B
将只进行评估,我建议你看看到其中的一个在下面的链接中,如果您有任何其他问题。
我已经对repl.it一个小程序,如果你想给你看作为一个例子。它是here。
因为这是一个* class属性*它在'A'被定义时创建,此时'B'还没有被定义。首先定义'B'。 – jonrsharpe