Skip to main content
 首页 » 编程设计

跨类函数的 Python 变量之如何调用它们

2025年05月04日11zlslch

我没有使用全局变量,而是尝试在类中创建一个变量的实例,这似乎是最佳实践。我如何在类中的其他函数中引用这个变量?我本以为 Test.running_sum 可以工作,或者至少可以在 test_function 中使用 running_sum,但我对这两者都不满意。非常感谢!

class Test: 
    def __init__(self): 
        self.root = None 
        running_sum = 0 
 
    def test_function(self): 
        print(Test.running_sum) 
        return 
 
    x = Test() 
    x.test_function() 

错误:

Traceback (most recent call last): 
  File "so.py", line 1, in <module> 
    class Test: 
  File "so.py", line 10, in Test 
    x = Test() 
NameError: name 'Test' is not defined 

请您参考如下方法:

使用方法签名中提供的self参数。

请注意,您编写的不是方法,而是使用类 Test 的外部函数。要编写 Test 方法,def 应该在 class Test 中缩进一个级别,如下所示:

class Test: 
    def __init__(self): 
        self.running_sum = 0 
    def test_function(self): 
        print(self.running_sum) 

如果您想了解此“最佳实践”背后的解释,可以添加几项内容。

假设你写了下面的代码:

class Test: 
    numbers = [] 
    def add(self, value): 
        self.numbers.append(value) 

Test.numbers 列表被实例化一次并在 Test 的所有实例中共享。因此,如果将 2 个不同的实例添加到列表中,它们将作用于同一个列表:

a = Test() 
b = Test() 
a.add(5) 
b.add(10) 
assert a.numbers == b.numbers == Test.numbers 

在 __init__ 函数中创建实例变量时,__init__ 将在每次实例化时运行,因此,列表将不再共享,因为它们将被创建每个单独的实例。

class Test: 
    def __init__(self): 
        self.numbers = [] 
    def add(self, number): 
        self.numbers.append(number) 
 
a = Test() 
b = Test() 
a.add(5) 
b.add(10) 
assert a != b