未定义类对象

时间:2014-02-16 20:18:55

标签: python

我正在尝试引用另一个类中的类对象。在下面的示例代码中,我希望能够从Class3调用Class1方法,但必须按顺序创建它们,其中Class1(ClassObject)创建Class2,Class2创建Class3。然后Class3必须能够调用ClassObject。

下面的代码给出了未定义的错误。

NameError:未定义全局名称“ClassObject”

此问题的解决方法或修复方法?

class Class1:
    def __init__(self):
        Class2()

    def method(self):
        print("test")

class Class2:
    def __init__(self):
        Class3()

class Class3:
    def __init__(self):
         ClassObject.method()


ClassObject = Class1()

2 个答案:

答案 0 :(得分:3)

分配在左侧执行。这意味着在定义ClassObject之前计算Class1()。 在做作之前,全局范围看起来像['Class1', 'Class2', 'Class3']

所以发生以下堆栈:

"Class1()" is called -> get Class1 reference in the global scope
Class1.__init__
   -> "Class2()" is called -> get Class2 reference in the global scope
   -> Class2.__init__
       -> "Class3()" is called -> ... you might know now.
       -> Class3.__init__
          -> ClassObject.method()
          -> try to get ClassObject from global scope
          -> raises exception: ClassObject isn't defined

印出

我想给你一个有效的代码,但你的3个课程没有任何意义...

答案 1 :(得分:0)

调用Class1()时,没有ClassObject个全局变量。

因为在python中没有变量声明,所以只有在定义时才能访问该变量,这意味着它具有值。在您的情况下,该值将是该实例,但该实例在分配完成之前尝试引用全局变量

如果要引用作业中的对象,必须使用self。但是,在您的代码中,Class3无法访问Class1实例,因此您将收到不同的错误。