我是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)
Run Code Online (Sandbox Code Playgroud)
结果
0====
value : default
=====
1====
value : A
A
=====
2====
value : A
A
=====
3====
value : default
A
=====
Run Code Online (Sandbox Code Playgroud)
但是测试的最后结果与我在上次测试中的预期不同.'b'实例的'list_value'中不应该有"A".它刚刚创建,从未添加过"A".我在'a'的实例中加了'A',而不是'b'.但结果表明,'b'中也有'A'更多,类中的'list_value'和'value'的工作方式不同.看起来两者都有相同的语法.为什么他们的工作不同?
mgi*_*nbr 21
事实上,这些是类变量.要创建实例变量,请在__init__函数中初始化它们:
class Chaos:
def __init__(self):
self.list_value = []
self.value = "default"
Run Code Online (Sandbox Code Playgroud)
原因value是表现像实例变量是因为你正在设置它self.value.当Python看到self.X它看起来X你的对象中是否有属性时,如果没有属性,它会查看它的类.由于您从未设置过self.list_value,它正在访问在所有实例之间共享的类变量,因此任何修改都将反映在每个其他对象中.
| 归档时间: |
|
| 查看次数: |
12296 次 |
| 最近记录: |