Python 未定义类对象
我试图引用另一个类中的类对象。在下面的示例代码中,我希望能够从Class3调用Class1方法,但它们必须按照Class1(ClassObject)创建Class2和Class2创建Class3的顺序创建。然后,Class3必须能够调用ClassObject 下面的代码给出了未定义的错误 NameError:未定义全局名称“ClassObject” 有解决这个问题的方法吗Python 未定义类对象,python,Python,我试图引用另一个类中的类对象。在下面的示例代码中,我希望能够从Class3调用Class1方法,但它们必须按照Class1(ClassObject)创建Class2和Class2创建Class3的顺序创建。然后,Class3必须能够调用ClassObject 下面的代码给出了未定义的错误 NameError:未定义全局名称“ClassObject” 有解决这个问题的方法吗 class Class1: def __init__(self): Class2() de
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()
调用Class1()
时,没有ClassObject
全局变量
由于python中没有变量声明,因此只有在定义变量时才能访问该变量,这意味着该变量具有值。在您的情况下,该值将与该实例相同,但该实例正在尝试在赋值完成之前引用全局变量
如果要引用分配中的对象,必须使用
self
。但是,在您的代码中,Class3
没有任何访问Class1
实例的权限,因此您将得到不同的错误 赋值从右向左执行。这意味着Class1()
是在定义ClassObject之前计算的。
在假装之前,全局范围看起来像['Class1','Class2','Class3']
因此,将发生以下堆栈:
“Class1()”在全局范围内调用->获取Class1引用
第一类__
->调用“Class2()”->在全局范围内获取Class2引用
->类别2.初始化__
->“Class3()”被称为->。。。你现在可能知道了。
->类别3.初始__
->ClassObject.method()
->尝试从全局范围获取类对象
->引发异常:未定义ClassObject
Inde
我想给你一个有效的代码,但你的3个类没有任何意义 将实例分配给成员变量或使用继承。(取决于你到底想要什么)。请更详细地解释您要归档的内容。这毫无意义。你似乎假定了某种继承,但没有继承。请解释一下你实际上想做什么。你的代码完全没有意义,表明你对python代码缺乏基本的理解。请至少阅读一门面向对象编程和python的入门课程…@有什么需要解释的吗?该错误是由于当时未定义全局。未进行否决表决,但
Class3
没有方法
方法。@是吗Class3
引用了ClassObject
,它是一个Class1
实例,它确实有方法
。问题是我说的。你说要使用self
,而self.method()
在Class3
…@poke中不起作用。我首先说,因为我认为它们是子类,编辑时忘了更改它。我现在要换台词了。然而,我的观点是正确的。在第一次分配实例之前,在\uuuu init\uuu
中访问它的唯一方法是使用self
。好吧,您的解释非常准确,但我认为您需要告诉OP更多,以便OP了解发生了什么。我是+1尝试;-)@巴库留的回答不太一样,但我同意,我也不明白你的反对票。我可以问你为什么用“矫揉造作”这个词吗?我不是英语母语,但它似乎是错的。你是说委派吗?表情?还是什么?@Bakuriu,因为我在写作时可能在想法语单词“矫揉造作”(意思是任务),所以。。。在我的脑海里变得混乱:)代码示例被简化了,而且相当简单。我遇到的问题与Tkinter有关,我有多个窗口,每个窗口都有自己的类。因此,窗口1中的按钮将打开窗口2。然后,窗口2尝试与窗口1交互,就像示例代码中class3尝试与class1交互一样,调用一个方法。关于您的解释,ClassObject=Class1()定义会发生在异常之后吗?