2014-04-26 161 views
0

我是python的新手,所以我現在很困惑。我只想在循環中創建一些類MyClass的實例。Python在循環中創建類實例

我的代碼:

for i in range(1, 10): 
    my_class = MyClass() 
    print "i = %d, items = %d" % (i, my_class.getItemsCount()); 
    my_class.addItem(i) 

MyClass類

class MyClass: 

    __items = [] 

    def addItem(self, item): 
    self.__items.append(item) 

    def getItemsCount(self): 
    return self.__items.__len__(); 

,輸出是:

i = 0, items = 0 
i = 1, items = 1 
i = 2, items = 2 
and so on... 

但我希望MyClass的新的空實例在每次迭代變量my_class。所以預期的輸出是:

i = 0, items = 0 
i = 1, items = 0 
i = 2, items = 0 

你能幫我理解嗎? 謝謝。

+1

'__items'是一個類成員,不是實例成員。它在'MyClass'的所有實例之間共享。 – juanchopanza

+2

避免使用雙下劃線,它僅在罕見的繼承情況下才有用。使用'len'函數而不是'__len__'-Method,例如'LEN(self._item)' – Daniel

回答

6

_items是一個類屬性,類定義時初始化,因此通過追加值,你正在修改的屬性和沒有實例屬性。

打你可以通過把這段代碼爲__init__方法創建_items爲類的每個實例的問題:

class MyClass: 
    def __init__(self): 
     self._items = [] 

然後_items列表對象將是在所有的類實例不同

>>> first = MyClass() 
>>> first._items.append(1) 
>>> second = MyClass() 
>>> second._items.append(1) 
>>> first._items is second._items 
False 

,因此追加將按預期工作。

順便說一下,你的情況__items is not quite good name choice for a class variable