クラス変数の使い方
クラス変数は、クラス内で定義され、すべてのインスタンスで共有される変数です。インスタンスごとに異なる値を持つインスタンス変数とは異なり、クラス変数はクラス全体に影響を与えるため、グローバルな値を管理したり、全体的な設定を保存するのに便利です。
クラス変数の基本的な使い方
クラス変数は、クラス定義内で直接宣言され、すべてのインスタンスからアクセス可能です。次に、クラス変数の定義方法と使用例を紹介します。
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
というクラス変数を使用しています。すべてのインスタンス(car1
やcar2
)は、このクラス変数を参照しており、クラス変数を変更すると、すべてのインスタンスにその変更が反映されます。
クラス変数とインスタンス変数の違い
クラス変数 | インスタンス変数 |
---|---|
クラス全体で共有される | 各インスタンスごとに異なる値を持つ |
クラス定義内に直接宣言される | __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
(クラス変数)とは別に扱われています。クラス変数を変更したい場合は、クラス名を使ってアクセスするようにしましょう。
まとめ
クラス変数は、クラス全体で共有されるデータを管理するのに便利です。クラス変数を使用することで、すべてのインスタンスに共通の情報を効率的に保持し、全体的な設定を管理することができます。ただし、インスタンスからの変更には注意が必要です。