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

时间:2011-03-14 17:27:32

标签: python variables

我正在尝试在SAME类的另一个方法中调用方法的变量,并且由于某种原因它什么都不打印。

class Colors():

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

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

我也试过print self.blue.var

5 个答案:

答案 0 :(得分:9)

本地变量是 local 到函数的范围。当函数当前没有执行时,它们甚至不存在,因此无法访问。

如果您希望变量具有更大的范围,那么,只需给它一个更大的范围:

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

def red(self):
    print self.var

答案 1 :(得分:3)

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

现在,当您添加并发时,redblue可能同时运行(但通常情况下,您永远不会知道也不应该关心)。但是var仍然是blue本地变量,因此,即使有一些方法可以获得它的价值,这样做也会非常疯狂,并且是违反良好做法的罪行。通过全局变量在线程之间共享状态是一个陷阱,也不需要在混合中抛出本地。

真正尝试做什么?您可能需要self.var = ...中的实例变量(return)或blue

答案 2 :(得分:1)

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

class Colors():

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

    def red(self):
        print self.var

答案 3 :(得分:1)

你有几个意想不到的事情发生在这里:

1)您将b分配给self.blue,这是一个指向蓝色的函数指针。

2)您有范围问题,需要以下

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

def red(self):
  print self.var

或者,如果你想打印蓝色的东西,你可以这样做:

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

def red(self):
  print blue()

答案 4 :(得分:0)

谢谢你们。我解决了这个问题。在第二种方法上创建了另一个具有相同值的局部变量。