在同一个python文件中使用一个类

时间:2017-05-05 22:08:23

标签: python class

我在同一个文件中有两个类。我试图从ClassB调用ClassB但收到以下错误:

NameError:name' ClassB'未定义

class A:
    var = B();

class B:
    def foo(self):

2 个答案:

答案 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()将被执行。

有两种方法可以解决这个问题:

  1. 在类A
  2. 之前定义B类
  3. 或者将语句var = B() 放在A类的构造函数中,如下所示
  4. 你的A级看起来像这样

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

    这意味着只有在创建A类实例时才会评估self.var = B

    在Stack Overflow上已经多次看到这个主题,如果您有任何其他问题,我建议您在下面的链接中查看其中一个。

    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