我没有使用全局变量,而是尝试在类中创建一个变量的实例,这似乎是最佳实践。我如何在类中的其他函数中引用这个变量?我本以为 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
