前回の記事で、クラスは設計図のようなものであり、
そこから「インスタンス(実体)」を作ることを学びました。
今回は、クラスをより便利に使うための
コンストラクタと3種類のメソッド を詳しく解説します。
🧩 コンストラクタ(__init__)とは?
コンストラクタは、インスタンスが作られるときに
自動的に呼び出されるメソッド です。
Pythonでは特別に __init__() という名前で定義します。
🔹 基本構文
class Car:
def __init__(self, color, speed):
self.color = color
self.speed = speed
def drive(self):
print(f"{self.color}の車が {self.speed}km/h で走っています!")
🔹 インスタンス化
car1 = Car("赤", 60)
car2 = Car("青", 100)
car1.drive()
car2.drive()
出力:
赤の車が 60km/h で走っています!
青の車が 100km/h で走っています!
💡
__init__()に渡した引数が、インスタンス固有のデータとして保存されます。
🧠 self の正体をもう一度
クラス内のメソッドで最初に書く self は、
「今、操作しているインスタンス自身」を表します。
class Dog:
def __init__(self, name):
self.name = name
def bark(self):
print(f"{self.name}がワン!と吠えました。")
dog1 = Dog("ポチ")
dog2 = Dog("ハチ")
dog1.bark()
dog2.bark()
出力:
ポチがワン!と吠えました。
ハチがワン!と吠えました。
selfがあるから、インスタンスごとに独立したデータを持てるんです。
🧱 インスタンスメソッドとは?
今まで使ってきた self を含むメソッドは、
「インスタンスメソッド」と呼ばれます。
selfを使ってインスタンス固有のデータにアクセスする- 通常は
オブジェクト.メソッド()の形で呼び出す
⚙️ クラス変数とインスタンス変数の違い
ここで、クラス全体で共有する変数を学びましょう。
class Car:
wheels = 4 # クラス変数(全インスタンスで共通)
def __init__(self, color):
self.color = color # インスタンス変数(個別)
car1 = Car("赤")
car2 = Car("青")
print(car1.wheels, car2.wheels) # 両方4
car1.wheels = 6 # car1だけ上書き
print(car1.wheels, car2.wheels)
出力:
4 4
6 4
💡
wheelsはクラス共通。colorはインスタンスごとに違う。
クラス変数は全体の設定値、インスタンス変数は個人の状態です。
🧩 クラスメソッド(@classmethod)
クラス変数を操作したいときは、
クラスメソッド を使います。
class Car:
wheels = 4
def __init__(self, color):
self.color = color
@classmethod
def change_wheels(cls, new_count):
cls.wheels = new_count
print(f"全ての車の車輪を {cls.wheels} 個に変更しました。")
Car.change_wheels(6)
print(Car.wheels)
出力:
全ての車の車輪を 6 個に変更しました。
6
💡
@classmethodはclsを使ってクラス全体を操作します。
インスタンスを作らなくても呼び出せます。
⚙️ スタティックメソッド(@staticmethod)
@staticmethod は、クラスにもインスタンスにも依存しない
「ただの関数」 をクラスの中に整理したいときに使います。
class MathUtil:
@staticmethod
def add(a, b):
return a + b
@staticmethod
def multiply(a, b):
return a * b
呼び出し
print(MathUtil.add(3, 5))
print(MathUtil.multiply(4, 6))
出力:
8
24
💡
@staticmethodはselfやclsを使わないメソッド。
「関連する関数をまとめておきたいとき」に便利です。
🧠 3種類のメソッドまとめ
| メソッドの種類 | 定義 | 使うとき | 特徴 |
|---|---|---|---|
| インスタンスメソッド | def method(self) | 通常の処理 | 各インスタンスのデータを操作 |
| クラスメソッド | @classmethod def method(cls) | 全体設定の変更 | クラス変数を操作できる |
| スタティックメソッド | @staticmethod def method() | 便利関数 | selfもclsも使わない |
💡 応用:3種類を1つのクラスで使う
class Employee:
company = "AI Works"
def __init__(self, name):
self.name = name
def introduce(self):
print(f"私は {Employee.company} の {self.name} です。")
@classmethod
def change_company(cls, new_name):
cls.company = new_name
print(f"会社名を {cls.company} に変更しました。")
@staticmethod
def hello():
print("こんにちは!Pythonのクラスを学びましょう!")
実行例
Employee.hello()
Employee.change_company("OpenAI Japan")
emp1 = Employee("太郎")
emp1.introduce()
出力:
こんにちは!Pythonのクラスを学びましょう!
会社名を OpenAI Japan に変更しました。
私は OpenAI Japan の 太郎 です。
💡 クラスを使えば「設定」「個別データ」「便利関数」を
ひとつの構造に整理できます。
📝 この章のまとめ
- ✅
__init__()はインスタンス作成時に自動実行される - ✅
selfは「自分自身(インスタンス)」を表す - ✅ クラス変数は全体で共有される
- ✅
@classmethodはクラス全体を操作する - ✅
@staticmethodは関連する関数をまとめるのに便利
次回 👉 クラス③:継承とポリモーフィズム
では、クラスを「引き継いで」新しい機能を追加したり、
「多態性」でメソッドを上書きする方法を学びます。


コメント