如何将对象/变量的值从一个函数检索到另一个函数并通过 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()
我试图从 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()