我在同一个文件中有两个类。我试图从ClassB调用ClassB但收到以下错误:
NameError:name' ClassB'未定义
class A:
var = B();
class B:
def foo(self):
答案 0 :(得分:5)
Class attributes(与您尝试定义的A.var
一样)会在解析和创建类时进行评估,因此当您尝试引用时,B()
将不存在它在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
答案 1 :(得分:2)
这些课程是"见过"按照它们的写入顺序。因此,如果您在第一个类中有一个语句,它将在现场直接进行评估,然后再继续在文件中进行评估。
因此,当Python解释器的B类尚不存在时,您的语句var = B()
将被执行。
有两种方法可以解决这个问题:
var = B()
放在A类的构造函数中,如下所示你的A级看起来像这样
class A:
def __init__(self):
self.var = B()
这意味着只有在创建A类实例时才会评估self.var = B
。
在Stack Overflow上已经多次看到这个主题,如果您有任何其他问题,我建议您在下面的链接中查看其中一个。
我在repl.it上制作了一个小程序,如果你愿意,可以向你展示一个例子。它是here。