Python 未定义类对象

Python 未定义类对象,python,Python,我试图引用另一个类中的类对象。在下面的示例代码中,我希望能够从Class3调用Class1方法,但它们必须按照Class1(ClassObject)创建Class2和Class2创建Class3的顺序创建。然后,Class3必须能够调用ClassObject 下面的代码给出了未定义的错误 NameError:未定义全局名称“ClassObject” 有解决这个问题的方法吗 class Class1: def __init__(self): Class2() de

我试图引用另一个类中的类对象。在下面的示例代码中,我希望能够从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()
调用
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()定义会发生在异常之后吗?