【Python】第5章第8回:クラス変数とインスタンス変数の違い
本記事では、Pythonのオブジェクト指向プログラミングにおける「クラス変数」と「インスタンス変数」の違いについて解説します。これらを理解することで、より効率的なコード設計が可能になります。
0. 記事の概要
この記事を読むメリット
- クラス変数とインスタンス変数の違いを理解:適切な場面で使い分けができるようになります。
- コード設計力の向上:データのスコープを明確にし、効率的なクラス設計が可能です。
- バグの防止:誤った変数の使用によるエラーを回避できます。
この記事で学べること
- クラス変数とインスタンス変数の定義と役割
- それぞれの変数がどのように振る舞うかの実例
- 使い分けの具体的なポイント
1. クラス変数とは?
1.1 定義
クラス変数は、クラスそのものに属する変数であり、すべてのインスタンス間で共有されます。クラス変数は通常、クラスブロック内で直接定義されます。
1.2 クラス変数の特徴
- クラス全体で共有されるデータを保持
- クラス名を通じてアクセス可能
- インスタンス間で値が共通
1.3 クラス変数の実例
# クラス変数の例
class Person:
species = "Human" # クラス変数
def __init__(self, name):
self.name = name # インスタンス変数
動作解説
species
はクラス変数であり、すべてのPerson
インスタンスで共有されます。self.name
はインスタンスごとに異なる値を持ちます。
2. インスタンス変数とは?
2.1 定義
インスタンス変数は、特定のインスタンスに属する変数であり、インスタンスごとに異なる値を持ちます。
2.2 インスタンス変数の特徴
- インスタンスごとに独立したデータを保持
self
キーワードを通じて定義・アクセス- 特定のインスタンスに固有の情報を格納
2.3 インスタンス変数の実例
# インスタンス変数の例
class Person:
def __init__(self, name, age):
self.name = name # インスタンス変数
self.age = age # インスタンス変数
動作解説
self.name
とself.age
はインスタンスごとに異なる値を持ちます。- インスタンス生成時に初期化され、個別の情報を格納します。
3. クラス変数とインスタンス変数の違い
3.1 主な違い
クラス変数 | インスタンス変数 |
---|---|
クラス全体で共有 | インスタンスごとに独立 |
クラス名またはインスタンスからアクセス可能 | インスタンスからのみアクセス可能 |
通常、クラス内で直接定義 | self を使用して定義 |
4. 練習問題
以下の課題に挑戦してみましょう。
- 「Company」というクラスを作成し、従業員数をクラス変数として定義してください。
- 従業員の名前と役職をインスタンス変数として保持し、それぞれの従業員情報を出力してください。
5. 練習問題の解答と解説
問1の解答例
# Companyクラス
class Company:
employee_count = 0 # クラス変数
問2の解答例
# インスタンス変数を使用した例
class Company:
employee_count = 0
def __init__(self, name, position):
self.name = name
self.position = position
Company.employee_count += 1
def display_employee(self):
print(f"名前: {self.name}, 役職: {self.position}")
6. まとめ
クラス変数とインスタンス変数の違いを理解することで、Pythonのクラス設計がより効果的になります。これらを適切に使い分け、効率的なコードを書きましょう。