我正在尝试引用另一个类中的类对象。在下面的示例代码中,我希望能够从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()
答案 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
实例,因此您将收到不同的错误。