2016-11-29 35 views
1

我現在正在學習python中的類。如果我的語言有點草率,我很抱歉,但我仍然在努力理解課程是如何運作的。在Python中,如何在初始化時將每個類的新實例添加到列表中?

在通過我自己的一些項目工作時,我經常發現自己想要在初始化時添加一個對象到一個列表中,以便我可以跟蹤該類型的所有對象。我一直在努力做到這一點通過以下方式:

class My_Class(object): 

    Object_List=[] 

    def __init__(self): 
     Object_List.append(self) 

但是,從我所知道的,「_ _init _ _」組曲沒有對象列表中它的命名空間。如果這是正確的,這似乎是有道理的,因爲函數具有自己的名稱空間。然而,問題是上述代碼不起作用。我似乎無法將我的對象添加到全局定義的列表中。

任何人都可以提出另一種方式,我可以完成相同的事情,並最終創建了我創建的所有My_Class對象的列表?

+1

嘗試'self.Object_List.append(個體經營)'。 'Object_List'是類的一個屬性,在這種情況下,你需要通過類實例來訪問它。 –

+0

@TomDalton不會讓'Object_List'成爲一個實例變量嗎? –

+0

如果你還沒有在類級別定義它(通過'Object_List = []',那麼是的。但是,因爲你*有*定義它在類級別,並且因爲'append'不是一個賦值操作(即使它看起來像'寫'它真的是變量查找,然後是方法調用),那麼'self.Object_List'將找到類級變量並對其進行修改。如果您有一個類級變量wasn'列表,例如一個字符串,然後執行'self.my_string ='foo',會創建一個新的實例級別的變量,這會影響同名的類級別變量。 –

回答

3

嘗試以下操作:

>>> class A(): 
...  my_list = [] 
...  def __init__(self): 
...   A.my_list.append(self) 
... 
>>> 
>>> a = A() 
>>> A.my_list 
[<__main__.A instance at 0x0000000002563548>] 
>>> b = A() 
>>> A.my_list 
[<__main__.A instance at 0x0000000002563548>, <__main__.A instance at 0x00000000025FB408>] 
相關問題