2013-06-21 33 views
2

我定義了一個類和一個創建該類實例的函數。我認爲這個函數應該每次都創建一個新的實例。但是,它看起來像從上次調用中「繼承」它的內容。任何人都可以解釋這個謝謝!類別保留以前的內容,其中預計有新實例

class test: 
    a = [] 
    def b(self,x): 
     self.a.append(x) 

def add(): 
    t = test() 
    t.b(2) 
    return t 

if __name__ == '__main__': 
    print add().a 
    print add().a 
    print add().a 

輸出:

[2] 
[2, 2] 
[2, 2, 2] 
+0

任何人都可以解釋爲什麼和/或如何添加函數正在用.a來調用?如果你更喜歡我不要在這裏問問,我會創建一個新的問題。 –

+0

嗨Jake,添加函數返回「測試」類的一個實例。 'a'是一個類變量。 add()。a =(add()) – kai

回答

2

這裏是如何的a實例變量的定義應該是:

class test(object): 
    def __init__(self): 
     self.a = [] 

它以前a不是作爲一個實例變量聲明的方式,但一個正在該類的所有實例之間共享的類變量。

2

您將a定義爲變量。它不是綁定到你的類的實例,而是綁定到類本身,所以只有一個在類的實例中「共享」的列表。

你需要使它成爲一個實例變量:

class test: 
    def b(self, x): 
     self.a = [] 
     self.a.append(x) 

此外,你應該從object,以利用新式的類繼承:

class test(object):