2013-05-30 70 views
2

我的代碼:爲什麼我的Python實例被共享?

class Num: 

    nums = [] 

    def add(self, num): 
     self.nums.append(num) 

    def __str__(self): 
     return str(self.nums) 

a = Num() 
b = Num() 
a.add(5) 
print str(a) 
print str(b) 

產生

[5] 
[5] 

即使沒有被添加到b

回答

8

因爲NUMS是一個類屬性,而不是一個實例屬性。

class Num: 

    def __init__(self): 
     self.nums = [] 

    def add(self, num): 
     self.nums.append(num) 

    def __str__(self): 
     return str(self.nums) 

像這樣實現它將顯示您期望的行爲。

4
class Num: 
    nums = [] 

在類定義語句中定義nums使得nums成爲一個類變量。在__init__方法定義它來代替,通過將其設定爲實例的屬性:

class Num: 
    def __init__(self): # self is the instance 
     self.nums = [] # setting nums on the instance 
0

讓你nums空列表是一個實例屬性

class Num: 

    def __init__(self): 
     self.nums = [] 

    def add(self, num): 
     self.nums.append(num) 

    def __str__(self): 
     return str(self.nums) 

然後

a = Num() 
b = Num() 
a.add(5) 
b.add(6) 
print str(a) 
print str(b) 

給出

[5] 
[6] 
相關問題