2017-05-05 81 views
0

我在同一个文件中有两个类。我想打电话给ClassB的ClassB的距离,但收到以下错误:在同一个python文件中使用一个类

NameError:名字“ClassB的”没有定义

class A: 
    var = B(); 

class B: 
    def foo(self): 
+1

因为这是一个* class属性*它在'A'被定义时创建,此时'B'还没有被定义。首先定义'B'。 – jonrsharpe

回答

5

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 
2

的类按其写入顺序“看到”。因此,如果您在第一堂课中有一个陈述,那么在进一步阅读文件之前,将直接对其进行评估。

因此,您的陈述var = B()因为Python解释器的类B尚不存在而被执行。

有2种方法来解决这个问题:

  1. 之前定义B类A类
  2. 或将声明var = B()A类的构造如下图所示

您的A级看起来像这样

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

这意味着,当您创建的类A

本主题已经看到堆栈溢出多次的实例self.var = B将只进行评估,我建议你看看到其中的一个在下面的链接中,如果您有任何其他问题。

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

相关问题