<一覧に戻る

クラスとオブジェクトの基本

オブジェクト指向プログラミング(OOP)の基礎となる「クラスとオブジェクトの基本」について、Pythonのサンプルコードを用いて初心者にもわかりやすく解説します。

クラスとは?

クラスは、オブジェクトの設計図やテンプレートのようなもので、共通の属性(データ)とメソッド(操作)を持つオブジェクトを生成するためのものです。クラスを定義することで、同じ構造や機能を持つ複数のオブジェクトを効率的に作成できます。

オブジェクトとは?

オブジェクトは、クラスから生成された実体(インスタンス)のことです。オブジェクトはクラスで定義された属性とメソッドを持ち、実際に動作するデータと機能を提供します。

クラスの定義方法

Pythonでは、classキーワードを使ってクラスを定義します。以下に基本的なクラスの定義方法を示します。

class Dog:
    pass  # クラスの内容を後で追加します

上記の例では、Dogという名前の空のクラスを定義しています。passは何も実行しないステートメントで、クラス定義の場所を示すために使用します。

クラスに属性とメソッドを追加する

クラスには属性(データ)とメソッド(関数)を追加して、オブジェクトの状態や動作を定義します。

class Dog:
    # クラス属性(全てのインスタンスで共有される)
    species = "Canis familiaris"

    # コンストラクタ:オブジェクト生成時に呼ばれるメソッド
    def __init__(self, name, age):
        # インスタンス属性(各インスタンス固有のデータ)
        self.name = name
        self.age = age

    # メソッド:オブジェクトが実行できる操作
    def bark(self):
        return f"{self.name} says woof!"

説明

  • クラス属性 species は、すべての Dog オブジェクトで共有される属性です。
  • コンストラクタ __init__ は、オブジェクトが生成される際に自動的に呼び出され、インスタンス属性 nameage を初期化します。
  • メソッド bark は、オブジェクトが実行できる操作で、犬が吠える動作を表現しています。

オブジェクトの生成と利用

クラスからオブジェクトを生成し、その属性やメソッドを利用する方法を見てみましょう。

# Dogクラスのインスタンスを生成
my_dog = Dog("Buddy", 3)
your_dog = Dog("Lucy", 5)

# インスタンス属性にアクセス
print(my_dog.name)  # 出力: Buddy
print(your_dog.age)  # 出力: 5

# クラス属性にアクセス
print(Dog.species)      # 出力: Canis familiaris
print(my_dog.species)   # 出力: Canis familiaris

# メソッドの呼び出し
print(my_dog.bark())    # 出力: Buddy says woof!
print(your_dog.bark())  # 出力: Lucy says woof!

説明

  • my_dogyour_dog は、Dog クラスから生成された2つの異なるオブジェクトです。
  • my_dog.nameyour_dog.age によって、それぞれのオブジェクトのインスタンス属性にアクセスできます。
  • クラス属性 species は、クラス名 Dog を通じて直接アクセスすることも、オブジェクトを通じてアクセスすることもできます。
  • bark メソッドを呼び出すことで、各オブジェクト固有の動作を実行できます。

クラスとオブジェクトのまとめ

  • クラスはオブジェクトの設計図であり、属性とメソッドを定義します。
  • オブジェクトはクラスから生成された実体であり、クラスで定義された属性とメソッドを持ちます。
  • インスタンス属性は各オブジェクト固有のデータを保持し、クラス属性はクラス全体で共有されるデータを保持します。
  • メソッドはオブジェクトが実行できる操作を定義し、オブジェクトの動作を表現します。

実践例:簡単なクラスの作成

ここでは、Car クラスを作成し、車のオブジェクトを生成してみましょう。

class Car:
    # クラス属性
    wheels = 4

    def __init__(self, make, model, year):
        # インスタンス属性
        self.make = make
        self.model = model
        self.year = year

    def description(self):
        return f"{self.year} {self.make} {self.model}"

    def drive(self):
        return f"{self.description()} is driving."

# Carクラスのインスタンスを生成
car1 = Car("Toyota", "Corolla", 2020)
car2 = Car("Honda", "Civic", 2018)

# インスタンス属性にアクセス
print(car1.description())  # 出力: 2020 Toyota Corolla
print(car2.description())  # 出力: 2018 Honda Civic

# メソッドの呼び出し
print(car1.drive())        # 出力: 2020 Toyota Corolla is driving.
print(car2.drive())        # 出力: 2018 Honda Civic is driving.

# クラス属性にアクセス
print(Car.wheels)          # 出力: 4
print(car1.wheels)         # 出力: 4

説明

  • Car クラスには、make(メーカー)、model(モデル)、year(年式)というインスタンス属性と、wheels というクラス属性があります。
  • description メソッドは、車の詳細を文字列として返します。
  • drive メソッドは、車が走行していることを表現する文字列を返します。
  • car1car2 は、それぞれ異なる車のオブジェクトで、クラス属性 wheels はすべてのオブジェクトで共有されています。

まとめ

クラスとオブジェクトの基本を理解することは、Pythonでのオブジェクト指向プログラミングの基礎を築く上で非常に重要です。クラスを定義し、オブジェクトを生成することで、データと機能を効果的に管理し、再利用性の高いコードを書くことができます。実際にコードを書いて試すことで、クラスとオブジェクトの概念をより深く理解しましょう。

一覧に戻る

出力結果: