Pythonのクラス変数とインスタンス変数の違い

Pythonのクラスにはクラス変数とインスタンス変数という2つの種類の変数を作成することができます。

それぞれの変数には影響範囲が異なり、混乱して利用すると思わぬ不具合を誘発するので注意して利用することが必要です。

スポンサーリンク

Pythonのクラス変数とインスタンス変数の違い

Pythonのクラスにはクラス変数とインスタンス変数という2つの種類の変数を作成することができます。

それぞれの特徴は以下の通りです。

クラス変数はそのクラスから生成されたインスタンスすべてから参照可能な変数で、各インスタンスで値も共有します。
(変更すると全インスタンスからの参照する値が変わって見えます。)
インスタンス変数は、それぞれのインスタンス内のみで確保される変数で、値を変更しても他のインスタンスの変数には影響を与えません

具体的にはクラス変数はクラス宣言の直下に宣言され、インスタンス変数は各関数の中で設定されます。

上記のプログラムを実行すると

になります。

インスタンス変数を変更しても他のインスタンスの値は変更されませんが、クラス変数の値は変更すると全インスタンスのクラス変数の値が変更されます。

まとめ

クラス変数とインスタンス変数の違いを表にまとめると

  クラス変数 インスタンス変数
共有範囲 すべてのインスタンスで共有
クラス内でユニーク
インスタンス内で確保
インスタンス内でユニーク
アクセス すべてのインスタンスから可能 インスタンス内のみ可能
定義 クラス名直下に宣言 インスタンスの関数内で設定
クラスオブジェクトから参照 可能 不可能
インスタンスオブジェクトから参照 可能 可能

となります。

以上、Pythonのクラス変数とインスタンス変数の違いでした。

タイトルとURLをコピーしました