クラス変数の使い方 | クラス変数とインスタンス変数 | Python本格超入門

スポンサーリンク

スポンサーリンク

クラス変数の使い方

クラス変数は、クラス内で定義され、すべてのインスタンスで共有される変数です。インスタンスごとに異なる値を持つインスタンス変数とは異なり、クラス変数はクラス全体に影響を与えるため、グローバルな値を管理したり、全体的な設定を保存するのに便利です。

クラス変数の基本的な使い方

クラス変数は、クラス定義内で直接宣言され、すべてのインスタンスからアクセス可能です。次に、クラス変数の定義方法と使用例を紹介します。


class Car:
    # クラス変数
    wheels = 4  # すべての車は4つの車輪を持つ

    def __init__(self, brand):
        self.brand = brand  # インスタンス変数

    def show_info(self):
        return f"{self.brand}は{Car.wheels}つの車輪を持っています。"

# インスタンスを作成
car1 = Car("Toyota")
car2 = Car("Honda")

print(car1.show_info())  # 出力: Toyotaは4つの車輪を持っています。
print(car2.show_info())  # 出力: Hondaは4つの車輪を持っています。

# クラス変数にアクセスして変更
Car.wheels = 6

print(car1.show_info())  # 出力: Toyotaは6つの車輪を持っています。
print(car2.show_info())  # 出力: Hondaは6つの車輪を持っています。
    

上記の例では、Carクラスのwheelsというクラス変数を使用しています。すべてのインスタンス(car1car2)は、このクラス変数を参照しており、クラス変数を変更すると、すべてのインスタンスにその変更が反映されます。

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

クラス変数 インスタンス変数
クラス全体で共有される 各インスタンスごとに異なる値を持つ
クラス定義内に直接宣言される __init__メソッド内で宣言される
すべてのインスタンスが同じクラス変数にアクセスする 各インスタンスは固有のインスタンス変数を持つ

クラス変数を利用する場面

クラス変数は、クラス全体に影響を与える値や設定を管理する際に役立ちます。以下のような場面でよく利用されます。

  • 全インスタンスで共通の情報を保持する(例: すべての車の車輪の数)
  • インスタンス間で共有する設定やカウンタの管理
  • クラス全体に適用するデフォルト設定

クラス変数の注意点

クラス変数を操作する際の注意点として、インスタンスからクラス変数にアクセスして変更すると、新しいインスタンス変数が作成され、クラス変数自体は変更されません。クラス変数を変更する場合は、クラス名を使ってアクセスするようにしましょう。


class Car:
    wheels = 4  # クラス変数

    def __init__(self, brand):
        self.brand = brand

# インスタンスを作成
car1 = Car("Toyota")

# インスタンスからクラス変数を変更すると、新しいインスタンス変数が作成される
car1.wheels = 6
print(car1.wheels)  # 出力: 6 (インスタンス変数)
print(Car.wheels)   # 出力: 4 (クラス変数)
    

この例では、car1.wheelsはインスタンス変数として扱われ、Car.wheels(クラス変数)とは別に扱われています。クラス変数を変更したい場合は、クラス名を使ってアクセスするようにしましょう。

まとめ

クラス変数は、クラス全体で共有されるデータを管理するのに便利です。クラス変数を使用することで、すべてのインスタンスに共通の情報を効率的に保持し、全体的な設定を管理することができます。ただし、インスタンスからの変更には注意が必要です。