デフォルトでは、新旧どちらのクラスも、属性の記憶領域として使うための 辞書を持っています。この仕様は、ほとんどインスタンス変数を持たない ようなオブジェクトの場合には記憶領域の無駄遣いになります。 記憶領域の消費量は、大量のインスタンスを生成する際には深刻です。
このデフォルトの設定は、新たな形式のクラス定義において __slots__ を 定義することでオーバライドできます。__slots_ 宣言はインスタンス 変数のシーケンスを受け取ります。各々のインスタンス上には、各変数の値を 記憶するのにちょうど必要な量だけの記憶領域を確保します。 各々のインスタンスに対して __dict__ が生成されることがないので、 記憶領域が節約されます。
__slots__ を利用する際の注意
'__dict__'
を変数名のシーケンスに追加してください。
バージョン 2.3 で 変更 された仕様:
これまでは、'__dict__'
を __slots__
宣言に追加しても、インスタンス変数名として他にリストされていない
新たな属性の代入はできませんでした。
'__weakref__'
を変数名のシーケンスに追加してください。
バージョン 2.3 で 変更 された仕様:
これまでは、'__weakref__'
を __slots__
宣言に追加しても、弱参照のサポートを有効にできませんでした。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。