我是 python 新手,类的成员变量在我的 python 代码中工作得很奇怪。
有些像普通变量一样工作,但有些像静态变量一样工作!
class Chaos:
list_value = []
value = "default"
def set_value(self, word):
self.list_value.append(word)
self.value = word
def show(self, num):
print(str(num) + "====")
print("value : " + self.value)
for st in self.list_value:
sys.stdout.write(st)
print("\n=====\n")
a = Chaos()
a.show(0)
a.set_value("A")
a.show(1)
b = Chaos()
a.show(2)
b.show(3)
result
0====
value : default
=====
1====
value : A
A
=====
2====
value : A
A
=====
3====
value : default
A
=====
但最后的测试结果与我上次测试的预期不同。
“b”实例的“list_value”中不应有“A”。
它刚刚创建,之前从未添加过“A”。
我将“A”添加到“a”的实例中,而不是“b”。
但结果显示“b”中也有“A”
此外,类中的“list_value”和“value”的工作方式不同。
看起来两者具有相同的语法。为什么他们的工作方式不同?
事实上,这些是类变量。要创建实例变量,请在__init__
功能:
class Chaos:
def __init__(self):
self.list_value = []
self.value = "default"
原因value
行为类似于实例变量是因为您使用self.value
。当Python看到self.X
看起来是否有房产X
在你的对象中,如果没有,它会查看它的类。既然你从来没有设置过self.list_value
,它正在访问在所有实例之间共享的类变量,因此任何修改都会反映在每个其他对象中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)