簡體   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