3.3.2.4 __slots__

デフォルトでは、新旧どちらのクラスも、属性の記憶領域として使うための 辞書を持っています。この仕様は、ほとんどインスタンス変数を持たない ようなオブジェクトの場合には記憶領域の無駄遣いになります。 記憶領域の消費量は、大量のインスタンスを生成する際には深刻です。

このデフォルトの設定は、新たな形式のクラス定義において __slots__ を 定義することでオーバライドできます。__slots_ 宣言はインスタンス 変数のシーケンスを受け取ります。各々のインスタンス上には、各変数の値を 記憶するのにちょうど必要な量だけの記憶領域を確保します。 各々のインスタンスに対して __dict__ が生成されることがないので、 記憶領域が節約されます。

__slots__
このクラス変数には、文字列、反復可能オブジェクト、あるいはインスタンスが 用いる変数名を表す文字列からなるシーケンスを代入することができます。 この変数が新しい形式のクラスで定義されている場合、__slots__ は、各インスタンスに対して宣言された変数に必要な記憶領域を確保し、 __dict____weakref__ が自動的に生成されないようにします。 バージョン 2.2 で 新たに追加 された仕様です。

__slots__ を利用する際の注意

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。