繁体   English   中英

处理类和对象变量时python中字符串和数字的不同行为

[英]different behavior of strings and numbers in python when dealing with class and object variables

我发现了一个问题,但无法理解差异的原因:

代码1:

class Test:
    var=2
    def __init__(self):
        self.var=self.var+1

p=Test()
print "p.var:",p.var
q=Test()
print "q.var:",q.var

输出1:

p.var:3
q.var:3

为什么不是输出(根据用于解释代码2的概念)

p.var:3
q.var:4

代码2:

class Test:
    var=[]
    def __init__(self):
        self.var.append("fool")

p=Test()
print "p.var:",p.var
q=Test()
print "q.var:",q.var

输出2:

p.var: ['fool']
q.var: ['fool', 'fool']

我在Stack Exchange中阅读了有关code2的文章: python类实例变量和类变量

但无法将code1与以下概念链接。请帮助

此处的区别在于列表是可变对象; 整数是不可变的。 当code1递增self.var时,它必须返回一个新对象3。在第二个调用中,我们从2重新开始,为对象q生成另一个3。

在code2中, var仍然是一个类对象(该类仅一个,每个对象一个)。 当创建p时 ,我们将“ fool”附加到空列表中。 稍后创建q时,我们附加了第二个“傻瓜”。 同时打印它们:

p=Test2()
print "p.var1:",p.var
q=Test2()
print "q.var2:",q.var
print "p.var2:",p.var

输出:

p.var1: ['fool']
q.var2: ['fool', 'fool']
p.var2: ['fool', 'fool']

这样可以澄清事情吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM