跨类函数的Python变量-如何调用它们?
我尝试在类中创建一个变量实例,而不是使用全局变量,因为这似乎是最佳实践。如何跨类中的其他函数引用此变量?我本以为跨类函数的Python变量-如何调用它们?,python,class,Python,Class,我尝试在类中创建一个变量实例,而不是使用全局变量,因为这似乎是最佳实践。如何跨类中的其他函数引用此变量?我本以为Test.running_sum会有用,或者至少running_sum在Test\u function中有用,但我对这两种方法都没有任何运气。非常感谢 class Test: def __init__(self): self.root = None running_sum = 0 def test_function(self):
Test.running_sum
会有用,或者至少running_sum
在Test\u 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()
错误:
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
回溯(最近一次呼叫最后一次):
文件“so.py”,第1行,在
课堂测试:
测试中第10行的文件“so.py”
x=测试()
NameError:未定义名称“Test”
使用方法签名中提供的self
参数
请注意,您编写的不是一个方法,而是一个使用classTest
的外部函数。要编写测试方法
,def
应在类测试
中的一个缩进级别,如下所示:
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
的所有实例中共享。因此,如果列表中添加了两个不同的实例,则两个实例都作用于同一个列表:
a = Test()
b = Test()
a.add(5)
b.add(10)
assert a.numbers == b.numbers == Test.numbers
在\uuuu init\uuuu
函数中创建实例变量时,\uuuuu init\uuuu
将在每次实例化时运行,因此,列表将不再共享,因为它们将为每个单独的实例创建
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
使用方法签名中提供的
self
参数
请注意,您编写的不是一个方法,而是一个使用classTest
的外部函数。要编写测试方法
,def
应在类测试
中的一个缩进级别,如下所示:
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
的所有实例中共享。因此,如果列表中添加了两个不同的实例,则两个实例都作用于同一个列表:
a = Test()
b = Test()
a.add(5)
b.add(10)
assert a.numbers == b.numbers == Test.numbers
在\uuuu init\uuuu
函数中创建实例变量时,\uuuuu init\uuuu
将在每次实例化时运行,因此,列表将不再共享,因为它们将为每个单独的实例创建
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
如何跨类中的其他函数引用此变量
有几件事我看错了。首先,您正在类本身上调用running\u sum
,这没有意义,因为您将running\u sum
声明为Test
实例的属性。其次,从您设置问题格式的方式来看,test\u function
似乎不属于类test
,这没有意义,因为您将self
传递给它,这意味着它是一个实例方法。要解决此问题,您可以执行以下操作:
class Test:
def __init__(self):
self.running_sum = 0
def test_function(self):
print(self.running_sum)
然后这也很奇怪。。。如果只需执行以下操作即可测试运行_sum
的值,那么为什么需要“test_函数”
x = Test()
x.running_sum
如何跨类中的其他函数引用此变量
有几件事我看错了。首先,您正在类本身上调用running\u sum
,这没有意义,因为您将running\u sum
声明为Test
实例的属性。其次,从您设置问题格式的方式来看,test\u function
似乎不属于类test
,这没有意义,因为您将self
传递给它,这意味着它是一个实例方法。要解决此问题,您可以执行以下操作:
class Test:
def __init__(self):
self.running_sum = 0
def test_function(self):
print(self.running_sum)
然后这也很奇怪。。。如果只需执行以下操作即可测试运行_sum
的值,那么为什么需要“test_函数”
x = Test()
x.running_sum
作为对象属性:每个对象都有自己的属性。
Test
是类self
是调用该方法的Test
对象
class Test:
def __init__(self):
self.root = None
self.running_sum = 0
def test_function(self):
self.running_sum += 1
print(self.running_sum)
return
x = Test()
y = Test()
x.test_function()
y.test_function()
输出:
1.
一,
作为类属性:所有对象共享同一个变量。
self.\uuuu class\uuuuu
是调用对象的类(即Test
)
输出:
1
2
作为对象属性:每个对象都有自己的属性。
Test
是类self
是调用该方法的Test
对象
class Test:
def __init__(self):
self.root = None
self.running_sum = 0
def test_function(self):
self.running_sum += 1
print(self.running_sum)
return
x = Test()
y = Test()
x.test_function()
y.test_function()
输出:
1.
一,
作为类属性:所有对象共享同一个变量。
self.\uuuu class\uuuuu
是调用对象的类(即Test
)
输出:
1
2
在
\uuuu init\uuuu
函数中,您已经创建了一个局部变量。
该变量在函数完成后将不再存在
如果要创建特定于对象的变量x
,则应创建一个self.running\u sum
变量
class Test:
def __init__(self):
self.root = None
self.running_sum = 0
def test_function(self):
print(self.running_sum)
如果要创建特定于类的变量测试
,则应创建一个测试。运行_sum
变量
class Test:
running_sum = 0
def __init__(self):
self.root = None
def test_function(self):
print(Test.running_sum)
在
\uuuu init\uuuu
函数中,您已经创建了一个局部变量。
该变量在函数完成后将不再存在
如果要创建特定于对象的变量x
,则应创建一个self.running\u sum
变量
class Test:
def __init__(self):
self.root = None
self.running_sum = 0
def test_function(self):
print(self.running_sum)
如果要创建特定于类的变量测试
,则应创建一个测试。运行_sum
变量
class Test:
running_sum = 0
def __init__(self):
self.root = None
def test_function(self):
print(Test.running_sum)
running_sum
是类Test
实例的属性。你不能像在做Test.running\u sum
那样对类本身调用它。我看到了另一个问题。为什么test\u函数
在test
类之外?没有意义那代码中的缩进是错误的<代码>x=Tes