オブジェクト指向プログラミング(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__
は、オブジェクトが生成される際に自動的に呼び出され、インスタンス属性 name
と age
を初期化します。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_dog
と your_dog
は、Dog
クラスから生成された2つの異なるオブジェクトです。my_dog.name
や your_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
メソッドは、車が走行していることを表現する文字列を返します。car1
と car2
は、それぞれ異なる車のオブジェクトで、クラス属性 wheels
はすべてのオブジェクトで共有されています。クラスとオブジェクトの基本を理解することは、Pythonでのオブジェクト指向プログラミングの基礎を築く上で非常に重要です。クラスを定義し、オブジェクトを生成することで、データと機能を効果的に管理し、再利用性の高いコードを書くことができます。実際にコードを書いて試すことで、クラスとオブジェクトの概念をより深く理解しましょう。