<一覧に戻る

インスタンス変数とメソッド

オブジェクト指向プログラミング(OOP)の重要な要素である「インスタンス変数とメソッド」について、Pythonのサンプルコードを用いて初心者にもわかりやすく解説します。

インスタンス変数とは?

インスタンス変数は、クラスから生成された各オブジェクト(インスタンス)ごとに異なる値を持つ変数です。これにより、同じクラスから作られたオブジェクトでも、それぞれ異なる状態を保持することができます。

メソッドとは?

メソッドは、クラス内で定義された関数であり、オブジェクトの動作や操作を定義します。メソッドはオブジェクトの状態を変更したり、オブジェクトに関連する処理を実行したりするために使用されます。

インスタンス変数の定義と使用

インスタンス変数は、主にコンストラクタ(__init__メソッド)内で定義されます。selfキーワードを使用して、各インスタンスに固有の変数を作成します。

サンプルコード

以下に、Personクラスを例にインスタンス変数とメソッドの定義方法を示します。

class Person:
    def __init__(self, name, age):
        # インスタンス変数の定義
        self.name = name
        self.age = age

    # メソッドの定義
    def greet(self):
        print(f"こんにちは、私の名前は{self.name}です。年齢は{self.age}歳です。")

    def have_birthday(self):
        self.age += 1
        print(f"お誕生日おめでとう!今は{self.age}歳になりました。")

説明

  • コンストラクタ __init__:
  • オブジェクトが生成されるときに自動的に呼び出されます。
  • self.nameself.age はインスタンス変数で、各オブジェクトに固有の名前と年齢を保持します。

  • メソッド greet:

  • オブジェクトの状態を表示するメソッドです。
  • self を使ってインスタンス変数にアクセスし、挨拶メッセージを出力します。

  • メソッド have_birthday:

  • オブジェクトの年齢を1歳増やすメソッドです。
  • インスタンス変数 self.age を更新し、新しい年齢を表示します。

オブジェクトの生成とメソッドの呼び出し

クラスからオブジェクトを生成し、インスタンス変数やメソッドを使用する方法を見てみましょう。

サンプルコード

# Personクラスのインスタンスを生成
person1 = Person("太郎", 25)
person2 = Person("花子", 30)

# インスタンス変数にアクセス
print(person1.name)  # 出力: 太郎
print(person2.age)   # 出力: 30

# メソッドの呼び出し
person1.greet()      # 出力: こんにちは、私の名前は太郎です。年齢は25歳です。
person2.greet()      # 出力: こんにちは、私の名前は花子です。年齢は30歳です。

# メソッドを使ってインスタンス変数を変更
person1.have_birthday()  # 出力: お誕生日おめでとう!今は26歳になりました。
print(person1.age)       # 出力: 26

説明

  • オブジェクト生成:
  • person1person2 は、Person クラスから生成された2つの異なるオブジェクトです。
  • 各オブジェクトは独自の nameage を持っています。

  • インスタンス変数へのアクセス:

  • person1.nameperson2.age を通じて、各オブジェクトのインスタンス変数にアクセスできます。

  • メソッドの呼び出し:

  • greet メソッドを呼び出すことで、各オブジェクトの状態に基づいたメッセージを表示します。
  • have_birthday メソッドを呼び出すと、オブジェクトの age が1歳増え、その新しい年齢が表示されます。

まとめ

  • インスタンス変数は、クラスから生成された各オブジェクトごとに異なるデータを保持します。
  • メソッドは、オブジェクトの動作や操作を定義し、オブジェクトの状態を操作します。
  • クラスを通じてインスタンス変数とメソッドを定義することで、データと機能を効果的に管理し、再利用性の高いコードを作成できます。

実践例:学生クラスの作成

次に、Studentクラスを作成し、学生の名前と成績を管理する例を見てみましょう。

class Student:
    def __init__(self, name, grade):
        self.name = name        # インスタンス変数
        self.grade = grade      # インスタンス変数

    def display_info(self):
        print(f"学生名: {self.name}, 成績: {self.grade}")

    def update_grade(self, new_grade):
        self.grade = new_grade
        print(f"{self.name}の成績が{self.grade}に更新されました。")

# Studentクラスのインスタンスを生成
student1 = Student("佐藤", "A")
student2 = Student("鈴木", "B")

# メソッドの呼び出し
student1.display_info()  # 出力: 学生名: 佐藤, 成績: A
student2.display_info()  # 出力: 学生名: 鈴木, 成績: B

# インスタンス変数の更新
student1.update_grade("A+")
student2.update_grade("A-")

# 再度メソッドを呼び出して更新を確認
student1.display_info()  # 出力: 学生名: 佐藤, 成績: A+
student2.display_info()  # 出力: 学生名: 鈴木, 成績: A-

説明

  • クラス定義:
  • Studentクラスは、学生の名前 (name) と成績 (grade) をインスタンス変数として持ちます。

  • メソッド:

  • display_info メソッドは、学生の情報を表示します。
  • update_grade メソッドは、学生の成績を更新し、新しい成績を表示します。

  • オブジェクト生成とメソッドの使用:

  • student1student2 は、それぞれ異なる学生のオブジェクトです。
  • display_info メソッドを呼び出して、各学生の初期情報を表示します。
  • update_grade メソッドを使って成績を更新し、再度 display_info メソッドで変更を確認します。

まとめ

この記事では、オブジェクト指向プログラミング(OOP)の基礎となるインスタンス変数とメソッドについて、Pythonの具体的な例を用いてわかりやすく解説しました。インスタンス変数は各オブジェクトごとに異なるデータを保持し、メソッドはオブジェクトの動作や状態を操作する役割を果たします。PersonクラスやStudentクラスのサンプルコードを通じて、クラスの定義方法、オブジェクトの生成、インスタンス変数へのアクセス方法、メソッドの呼び出し方を具体的に学ぶことができました。これらの基本概念を理解することで、データと機能を効果的に管理し、再利用性の高いコードを書く力が身につきます。

出力結果: