我正在尝试在SAME类的另一个方法中调用方法的变量,并且由于某种原因它什么都不打印。
class Colors():
def blue(self):
var = "This is blue"
def red(self):
b = self.blue
print b.var
我也试过print self.blue.var
答案 0 :(得分:9)
本地变量是 local 到函数的范围。当函数当前没有执行时,它们甚至不存在,因此无法访问。
如果您希望变量具有更大的范围,那么,只需给它一个更大的范围:
def blue(self):
self.var = "This is blue"
def red(self):
print self.var
答案 1 :(得分:3)
一次只运行一个方法(在最简单的情况下,这是大多数语言中的默认和最常见的),并且因为局部变量仅在函数运行时存在,即在调用函数时创建在它返回时被销毁,在执行red
期间没有这样的本地。
现在,当您添加并发时,red
和blue
可能同时运行(但通常情况下,您永远不会知道也不应该关心)。但是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)
谢谢你们。我解决了这个问题。在第二种方法上创建了另一个具有相同值的局部变量。