Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在同一类的另一个方法中调用方法的变量_Python_Variables - Fatal编程技术网

Python 如何在同一类的另一个方法中调用方法的变量

Python 如何在同一类的另一个方法中调用方法的变量,python,variables,Python,Variables,我试图在同一类的另一个方法中调用一个方法的变量,但由于某种原因,它不会打印任何内容 class Colors(): def blue(self): var = "This is blue" def red(self): b = self.blue print b.var 我还尝试了打印self.blue.var局部变量是函数范围的局部变量。当函数当前未执行时,它们甚至不存在,因此没有可访问的内容 如果希望变量的作用域更大,那么

我试图在同一类的另一个方法中调用一个方法的变量,但由于某种原因,它不会打印任何内容

class Colors():

    def blue(self):
        var = "This is blue"

    def red(self):
        b = self.blue
        print b.var

我还尝试了打印self.blue.var局部变量是函数范围的局部变量。当函数当前未执行时,它们甚至不存在,因此没有可访问的内容

如果希望变量的作用域更大,那么只需给它一个更大的作用域:

def blue(self):
    self.var = "This is blue"

def red(self):
    print self.var

一次只运行一个方法(在最简单的情况下,这是大多数语言中最常见的默认方法),并且由于局部变量仅在函数运行时存在,即在调用函数时创建,在函数返回时销毁,因此在执行
red
期间没有此类局部变量

现在,当您添加并发时,
red
blue
可能同时运行(但通常情况下,您永远不知道也不应该在意)。但是
var
仍然是
blue
的一个本地变量,因此,即使有一些检查来获取它的值,这样做也完全是疯狂的,是对良好实践的犯罪。通过globals在线程之间共享状态是一个足够的陷阱,不需要将局部变量也加入其中


你到底想干什么?您可能需要一个实例变量(
self.var=…
)或
return
函数/方法中的
blue

局部变量不能在该函数/方法之外访问。要在方法之间共享状态,请使用实例变量

class Colors():

    def blue(self):
        self.var = "This is blue"

    def red(self):
        print self.var

这里发生了一些意想不到的事情:

1) 您正在将b分配给self.blue,它是指向blue的函数指针

2) 您有一个范围问题,您需要以下内容

def blue(self):
  self.var = "This is blue"

def red(self):
  print self.var
或者,如果要打印blue正在返回的内容,请执行以下操作:

def blue(self):
  return "This is blue"

def red(self):
  print blue()

谢谢各位。我想办法解决这个问题。在第二种方法中创建了另一个具有相同值的局部变量。

我正在考虑使用一个现有变量,节省我的编码时间。我可以绕过这个问题,但我只是希望在我发布的初始代码中我想做的是什么。请考虑接受最有帮助的答案(通过答案点击绿色复选标记)。这向所有人表明这是您选择的解决方案。