Pythonは「オブジェクト指向プログラミング」をサポートする言語です。これまではリストや辞書といった標準のデータ型を使用してきましたが、規模が大きくなると、関連するデータ(変数)とそれらを操作する処理(関数)をひとまとめにして管理したくなります。
これを実現するのが**クラス(Class)**です。クラスを定義することで、独自のデータ構造(オブジェクト)を作成できます。
この記事では、クラスの定義方法、コンストラクタ、メソッド、そしてインスタンス化という基本的な流れについて解説します。
クラスとオブジェクトの基本
- クラス (Class): データと機能をまとめた「設計図」です。どのような情報(属性)を持ち、どのような動作(メソッド)ができるかを定義します。
- インスタンス (Instance) / オブジェクト: クラス(設計図)を基に生成された「実体」です。
クラスの定義方法
クラスを定義するには class キーワードを使用します。
例として、ECサイトにおける「商品」を管理する Product クラスを作成します。このクラスは、商品名と価格というデータを持ち、情報を表示したり割引を適用したりする機能を持ちます。
class Product:
"""
商品を管理するクラス
"""
def __init__(self, name, price):
"""
コンストラクタ(初期化メソッド)
インスタンス生成時に呼び出され、属性をセットする
"""
self.name = name # 商品名
self.price = price # 価格
def show_detail(self):
"""
商品の詳細情報を表示するメソッド
"""
print(f"商品名: {self.name} | 価格: {self.price}円")
def apply_discount(self, rate):
"""
割引率(rate)を受け取り、価格を更新するメソッド
"""
discount_amount = int(self.price * rate)
self.price -= discount_amount
print(f"{int(rate * 100)}%の割引を適用しました。")
# --- クラスの利用(インスタンス化) ---
# Productクラスから、具体的な商品データ(インスタンス)を生成
laptop = Product("Gaming Laptop", 150000)
mouse = Product("Wireless Mouse", 3000)
# 属性(データ)へのアクセス
print(f"作成された商品: {laptop.name}")
# メソッド(機能)の呼び出し
laptop.show_detail()
mouse.show_detail()
print("-" * 20)
# 割引メソッドを実行
# 10% (0.1) 割引を適用
laptop.apply_discount(0.1)
# 価格が変更されたか確認
laptop.show_detail()
実行結果:
作成された商品: Gaming Laptop
商品名: Gaming Laptop | 価格: 150000円
商品名: Wireless Mouse | 価格: 3000円
--------------------
10%の割引を適用しました。
商品名: Gaming Laptop | 価格: 135000円
コードの解説
1. コンストラクタ __init__
def __init__(self, name, price):
self.name = name
self.price = price
__init__ は特殊なメソッドで、クラスからインスタンス(実体)が生成される際に自動的に呼び出されます。これを「コンストラクタ」と呼びます。 ここで self.変数名 = 値 と記述することで、そのインスタンス固有のデータ(属性/インスタンス変数)を保存します。
2. self とは何か
メソッドの第一引数にある self は、**「そのメソッドを呼び出しているインスタンス自身」**を指します。 laptop.show_detail() と呼び出した場合、show_detail メソッド内の self は laptop のデータを参照します。これにより、同じクラスから作られた laptop と mouse が、それぞれ別の名前と価格を保持できます。
3. インスタンス化と利用
laptop = Product("Gaming Laptop", 150000)
クラス名に () を付けて呼び出すことで、新しいインスタンスを作成します。引数は __init__ メソッドに渡されます(self は自動的に渡されるため、記述する必要はありません)。
まとめ
class クラス名:で独自の型を定義します。__init__メソッドで、インスタンス生成時の初期化処理(データの保存)を行います。selfを通じて、インスタンスごとのデータやメソッドにアクセスします。- データと処理をクラスにまとめることで、コードの整理整頓が進み、大規模なプログラム開発が容易になります。
