2016-11-29 5 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 = []'、yesを使用しますが、クラスレベルで*定義されているため、 'append'が代入ではないため(self-Object_List)は、クラスレベルの変数を見つけ、それを変更します。クラスレベルの変数があった場合、例えば文字列のようなリストを作成し、 '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>] 
関連する問題