我试图在类中创建变量的实例,而不是使用全局变量,因为它似乎是最佳实践.如何在类中的其他函数中引用此变量?我原本以为这Test.running_sum会起作用或者至少running_sum在其中test_function,但我也没有任何运气.非常感谢!
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()
Run Code Online (Sandbox Code Playgroud)
错误:
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
Run Code Online (Sandbox Code Playgroud)
使用self方法签名中提供的参数.
请注意,您编写的不是方法,而是使用类的外部函数Test.要编写一个方法Test,def应该在一个缩进级别内部class Test如下:
class Test:
def __init__(self):
self.running_sum = 0
def test_function(self):
print(self.running_sum)
Run Code Online (Sandbox Code Playgroud)
如果你想在这个"最佳实践"背后解释,有几件事要补充.
假设您编写以下代码:
class Test:
numbers = []
def add(self, value):
self.numbers.append(value)
Run Code Online (Sandbox Code Playgroud)
该Test.numbers列表实例化一次,并在所有实例中共享Test.因此,如果将2个不同的实例添加到列表中,则两者都作用于同一列表:
a = Test()
b = Test()
a.add(5)
b.add(10)
assert a.numbers == b.numbers == Test.numbers
Run Code Online (Sandbox Code Playgroud)
在__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
Run Code Online (Sandbox Code Playgroud)