如何将对象/变量的值从一个函数检索到另一个函数并通过 main 调用这两个函数?

How to retrieve value of objects/ variables from one function to another and calling the two functions by main?

我试图从 kindle() 获取值并在 bundle() 中处理它们并在 main 中调用这两个函数,但我收到错误:NameError: name 'x' is not defined at the bundle () 的第一行,而 x 是全局声明的。

class Program:

    x = 0
    y = 0
    def kindle(self):
        x = 2
        y = 3
    return x, y

    def bundle(self):
        z = x+ y
        print(z)

def main():
    p = Program()
    p.kindle()
    p.bundle()
if __name__ == "__main__":
    main()

啊,classes 的讨论。因此,您定义的 "globally" 的 x 和 y 并不是真正的全局变量,它们是 class 对象并从 class 访问。例如,

class thing:
    x = 10
    def func(self):
        print(thing.x)

请注意 "x" 附加到 class "thing"。因此,"x" 不是全局的。通常,class 内部的任何内容都可以通过 class 访问,并且与外部 space 无关。

当然,使用 classes 的主要好处之一是所有函数和变量共享一个公共名称space。此名称 space 的实例称为 "self" 并自动传递给所有 class 函数。因此,完全没有必要执行 "thing.x"(并且需要我知道 class 的名称)。相反,我们可以这样做:

class thing:
    x = 10
    def func(self):
        print(self.x)

我们当然可以走得更远。如果我可以在 class 中随时访问 self,那么如果我附加到 self,其他功能将能够自动看到该附件。让我们试试:

class Program:

    x = 0 #Default value if we don't overwrite. 
    y = 0 #Default value if we don't overwrite. 

    def kindle(self):
        self.x = 2 #Overwrote the default. 
        self.y = 3 #Overwrote the default. 
        #No need to return anything. Self already has x and y attached.

    def bundle(self):
        z = self.x + self.y
        print(z)
        #z is not attached to self, hence z is only available in this function. 

def main():
    p = Program() #Create an instance of the Program class. 
    p.kindle()    #Overwrite the default x and y values for just this instance.
    p.bundle()    #Add the values and print. 

if __name__ == "__main__":
    main()