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

2 投票
5 回答
5876 浏览
提问于 2025-04-16 13:40

我想在同一个类的另一个方法里访问一个变量,但不知道为什么打印出来什么都没有。

class Colors:
    def blue(self):
        var = "This is blue"
           
    def red(self):
        b = self.blue
        print(b.var)

我还试过 print(self.blue.var)

5 个回答

1

在一个函数或方法里面定义的局部变量,外面是无法访问到的。如果你想在不同的方法之间共享一些状态,可以使用实例变量。

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

    def red(self):
        print(self.var)
3

在最简单的情况下,程序一次只会运行一个方法,这也是大多数编程语言的默认情况。局部变量只在函数运行的时候存在,也就是说,当函数被调用时创建,函数返回时销毁。因此,在执行red的时候是没有局部变量的。

现在,如果你引入了并发,redblue可能会同时运行(不过通常情况下,你不会知道,也不需要关心这个)。但是var仍然是blue的一个局部变量,所以即使有办法获取它的值,这样做也是非常不理智的,简直是对良好编程习惯的犯罪。通过全局变量在不同线程之间共享状态已经够麻烦了,不需要再把局部变量也扔进来。

你其实想做的是什么呢?你可能想要一个实例变量(self.var = ...)或者从bluereturn一些东西。

10

局部变量就是在函数内部使用的变量,它们是“局部”的,意思是只在这个函数里有效。当这个函数没有在运行的时候,这些变量根本就不存在,所以你无法访问它们。

如果你想让这个变量的作用范围更大,那就把它放在一个更大的范围里:

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

def red(self):
    print(self.var)

撰写回答