【Python】レッスン5-02:メソッドの基本を理解しよう

一つ前のLessonではクラスの基本について学習しました。
今回はメソッドの基本について見ていきましょう。
Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:関数とスコープ編
Lesson4:データ構造編
Lesson5:オブジェクト指向編
・Lesson5-1:クラスの基本を理解しよう
・Lesson5-2:メソッドの基本を理解しよう ◁今回はココ
・Lesson5-3:カプセル化を理解しよう
・Lesson5-4:プロパティを理解しよう
・Lesson5-5:クラスの継承を理解しよう
・Lesson5-6:メソッドのオーバーライドを理解しよう
・Lesson5-7:静的メソッドを理解しよう
・Lesson5-8:モジュールを使いこなそう
・Lesson5-9:抽象クラスを理解しよう
・Lesson5-10:ミックスインを理解しよう
・Lesson5-11:データクラスを理解しよう
・練習問題5-1:モンスター捕獲ゲームを作ろう
・練習問題5-2:モンスターとのバトルゲームを作ろう
次のステップ:Python基礎習得者にお勧めの道5選(実務or副業)
クラスを動かすしくみ|メソッドの基本を学ぼう
クラスに機能(動作)を追加するために欠かせないのが「メソッド」です。
これはオブジェクトが持つ振る舞いを定義するためのしくみで、関数との違いを理解しながら使いこなすことが重要です。
この知識を身につけることで、クラスに応じた処理をオブジェクト単位で整理・実行できるようになり、より柔軟で再利用しやすいコードを書けるようになります。
Pythonで本格的なオブジェクト指向設計に進むための土台となる内容ですので、ぜひ最後までじっくり取り組んでみてください。
メソッドとは何か|オブジェクトに紐づく関数
メソッドとは、クラスの内部で定義される関数のことです。
関数と同様に処理をまとめることができますが、メソッドは特定のインスタンスに紐づけられており、そのインスタンスの状態を操作することができます。
メソッドはオブジェクト指向プログラミングの基本となる概念であり、インスタンスに行動を与える役割を持ちます。
例えば、Car
クラスの中に start
メソッドを定義する例を見てみましょう。
class Car: # Carクラスの定義 def start(self): # startメソッドの定義 print("車がエンジンをかけました")
start
メソッドは「車がエンジンをかけました」というメッセージを表示します。
メソッドは 必ず最初に self
という引数を持ちます が、これはそのメソッドがどのインスタンスに対して実行されているかを示すものです。
メソッドの使い方|定義して呼び出す基本の流れ
次に、Car
クラスを使ってメソッドを呼び出す方法を説明します。
まずクラスからインスタンス(車)を作成し、そのインスタンスに対してメソッドを呼び出します。
class Car: # carクラスの定義 def __init__(self, brand, model): # コンストラクタの定義 self.brand = brand self.model = model def start(self): # startメソッドの定義 print(f"{self.brand} {self.model}がエンジンをかけました") def stop(self): # stopメソッドの定義 print(f"{self.brand} {self.model}が停止しました") # Carクラスのインスタンスを2つ作成 car1 = Car("トヨタ", "プリウス") car2 = Car("ホンダ", "シビック") # メソッドを呼び出して、車を操作 car1.start() # 出力: トヨタ プリウスがエンジンをかけました car2.start() # 出力: ホンダ シビックがエンジンをかけました car1.stop() # 出力: トヨタ プリウスが停止しました car2.stop() # 出力: ホンダ シビックが停止しました
このコードでは、Car
クラスに2つのメソッド、start
と stop
を定義しています。
それぞれのメソッドはインスタンスの brand
と model
に基づいて、エンジンの始動と停止の動作を表示します。
car1
と car2
という2台の車をインスタンス化し、それぞれの車でメソッドを呼び出すことができます。
上記の例でcar1.start()
となっているように、メソッドはインスタンス名の後にドットとメソッド名を付けて呼び出します。
このようにインスタンスごとに異なるデータを持たせながら、それぞれのインスタンスが 同じメソッドを使って異なる動作 を行うことができます。
まとめ|クラスに“動き”を与えよう
この記事では、クラスに紐づく関数「メソッド」の基本について学びました。
関数との違いを意識しながら、self
を使ってインスタンス変数にアクセスしたり、クラスに機能を追加する方法を理解できたはずです。
これにより、オブジェクト指向における「データと動作のまとまり」という考え方が、より実感を伴って理解できるようになったことでしょう。
自分だけのクラスを作り、そこに動きを持たせられるようになった今、Pythonを使ってより複雑な処理や本格的なアプリケーションの設計に一歩近づきました。
この調子で、ステップアップを続けていきましょう。
- サイト改善アンケート|ご意見をお聞かせください(1分で終わります)
-
本サイトでは、みなさまの学習をよりサポートできるサービスを目指しております。
そのため、みなさまの「プログラミングを学習する理由」などをアンケート形式でお伺いしています。1分だけ、ご協力いただけますと幸いです。
【Python】サイト改善アンケート
練習問題:メソッドを使ってみよう
この記事で学習した「メソッドの基本」を復習する練習問題に挑戦しましょう。
問題|家電製品の操作プログラムを作ろう
家電製品の電源操作をシミュレートするプログラムを作成しましょう。
この問題ではクラスとメソッドを使って、複数の家電にそれぞれの動作(オン・オフ・状態確認)を定義し、個別に操作できるようにします。
以下の要件に従ってコードを完成させてください。
- クラス
Appliance
を作成し、__init__
メソッドでブランド、消費電力、電源の状態(デフォルトでオフ)を定義すること。 - メソッド
turn_on
を作成し、電源がオフのときにオンにし、メッセージを表示すること。既にオンの場合はその旨を表示すること。 - メソッド
turn_off
を作成し、電源がオンのときにオフにし、メッセージを表示すること。既にオフの場合はその旨を表示すること。 - メソッド
check_status
を作成し、現在の電源状態(オンかオフか)を表示すること。 - インスタンスを2つ作成し、それぞれの操作を行い、結果を表示すること。
ただし、以下のような実行結果となるコードを書くこと。
テレビの電源状態はオフです テレビがオンになりました テレビの電源状態はオンです テレビがオフになりました 冷蔵庫がオンになりました 冷蔵庫の電源状態はオンです
ヒント|難しいと感じる人だけ見よう
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント1【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)1:家電製品の情報と初期状態を定義するクラスを作成
・クラスはclass
というキーワードで始めて定義します
・初期化メソッドの名前は__init__
と決まっています
・インスタンスごとの情報はself
を使って記録します2:電源がオフのときに家電をオンにするメソッドを定義
・メソッドはdef
を使って定義します
・状態を確認するにはif
文を使います
・状態の変更にはself.変数名 = 値
を使います3:電源がオンのときに家電をオフにするメソッドを定義
・状態がオンかどうかはif self.変数名
で判定できます
・状態の切り替えにはTrue
やFalse
を使います4:現在の電源状態を確認して表示するメソッドを定義
・状態によって異なる値を代入したいときはif ... else ...
を使えます
・self.変数名
を使ってインスタンスの情報にアクセスします5:家電インスタンスを使って、メソッドを呼び出し操作を実行
・クラスからオブジェクトを作るときは「クラス名(値, 値, …)」の形で書きます
・作ったオブジェクトに対しては「インスタンス名.メソッド名()」で操作できます
・同じメソッドでも、インスタンスによって動作の対象が変わります
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# 家電製品クラスを定義します class Appliance: def __init__(self, brand, power, is_on=False): # 家電製品のブランド、消費電力、電源の状態を定義 self.brand = brand self.power = power # 消費電力 (W) self.is_on = is_on # 電源がオンかオフかの状態 '''(穴埋め)電源をオンにするメソッドを定義する''' def turn_off(self): # 家電製品をオフにするメソッド if self.is_on: self.is_on = '''(穴埋め)''' print(f"{self.brand}がオフになりました") else: print(f"{self.brand}は既にオフになっています") def check_status(self): # 家電製品の電源状態を確認するメソッド '''(穴埋め)''' = "オン" if self.is_on else "オフ" print(f"{self.brand}の電源状態は{status}です") # Applianceクラスのインスタンスを作成します tv = Appliance("テレビ", 150) fridge = Appliance("冷蔵庫", 200) # テレビの操作 tv.check_status() # 初期状態ではオフのはずです '''(穴埋め)'''.turn_on() # テレビをオンにします tv.check_status() # 電源がオンになったか確認します tv.turn_off() # テレビをオフにします # 冷蔵庫の操作 fridge.turn_on() # 冷蔵庫をオンにします fridge.check_status() # 冷蔵庫の電源状態を確認します
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
解答例|家電クラスで電源操作プログラム
例えば以下のようなプログラムが考えられます。
- 正解コード
-
# 家電製品クラスを定義します class Appliance: def __init__(self, brand, power, is_on=False): # 家電製品のブランド、消費電力、電源の状態を定義 self.brand = brand self.power = power # 消費電力 (W) self.is_on = is_on # 電源がオンかオフかの状態 def turn_on(self): # 家電製品をオンにするメソッド if not self.is_on: self.is_on = True print(f"{self.brand}がオンになりました") else: print(f"{self.brand}は既にオンになっています") def turn_off(self): # 家電製品をオフにするメソッド if self.is_on: self.is_on = False print(f"{self.brand}がオフになりました") else: print(f"{self.brand}は既にオフになっています") def check_status(self): # 家電製品の電源状態を確認するメソッド status = "オン" if self.is_on else "オフ" print(f"{self.brand}の電源状態は{status}です") # Applianceクラスのインスタンスを作成します tv = Appliance("テレビ", 150) fridge = Appliance("冷蔵庫", 200) # テレビの操作 tv.check_status() # 初期状態ではオフのはずです tv.turn_on() # テレビをオンにします tv.check_status() # 電源がオンになったか確認します tv.turn_off() # テレビをオフにします # 冷蔵庫の操作 fridge.turn_on() # 冷蔵庫をオンにします fridge.check_status() # 冷蔵庫の電源状態を確認します
解答例の解説|家電クラスで電源操作プログラムの考え方
解答例の詳細解説は以下の通りです。
- 詳細解説
-
家電製品クラスを定義
# 家電製品クラスを定義します class Appliance: def __init__(self, brand, power, is_on=False): # 家電製品のブランド、消費電力、電源の状態を定義 self.brand = brand self.power = power # 消費電力 (W) self.is_on = is_on # 電源がオンかオフかの状態
この部分では、家電製品を表すクラスを作成し、そのクラスが持つ基本的な情報を定義しています。
具体的にはブランド名と消費電力、そして電源がオンかオフかという状態を、インスタンスごとに記録できるようにします。
このように、__init__
という特別な初期化メソッドを使うことで、インスタンスを作成したときに自動的に必要な情報が設定される仕組みになっています。家電製品をオンにするメソッド
def turn_on(self): # 家電製品をオンにするメソッド if not self.is_on: self.is_on = True print(f"{self.brand}がオンになりました") else: print(f"{self.brand}は既にオンになっています")
この部分では、家電の電源をオンにする処理をまとめたメソッドを定義しています。
電源がオフの状態であれば、オンに切り替えてメッセージを表示します。もしすでにオンであれば、それを知らせるメッセージだけを表示します。
このように、「状態によって異なる処理を行う」ために条件分岐が使われています。メソッド内でインスタンス変数を使うことで、インスタンスごとに動作を変えることができます。家電製品をオフにするメソッド
def turn_off(self): # 家電製品をオフにするメソッド if self.is_on: self.is_on = False print(f"{self.brand}がオフになりました") else: print(f"{self.brand}は既にオフになっています")
この部分では、家電の電源をオフにするためのメソッドを定義しています。
電源がオンになっていれば、オフに切り替えてそのことを知らせるメッセージを表示します。すでにオフの状態であれば、何もしない代わりに「すでにオフ」であることを表示します。
これにより、家電が現在どういう状態にあるのかに応じて、適切な動作と表示が行えるようになります。家電製品の電源状態を確認するメソッド
def check_status(self): # 家電製品の電源状態を確認するメソッド status = "オン" if self.is_on else "オフ" print(f"{self.brand}の電源状態は{status}です")
この部分では、家電の電源が現在オンかオフかを調べて、それに応じたメッセージを表示するメソッドを定義しています。
状態は変えずに、確認して知らせるだけの処理なので、出力を通じて現在の状態を把握できるのが特徴です。
条件に応じて異なる値を変数に代入する方法を使っており、コードが短く分かりやすくなっています。インスタンス生成と操作
# Applianceクラスのインスタンスを作成します tv = Appliance("テレビ", 150) fridge = Appliance("冷蔵庫", 200) # テレビの操作 tv.check_status() # 初期状態ではオフのはずです tv.turn_on() # テレビをオンにします tv.check_status() # 電源がオンになったか確認します tv.turn_off() # テレビをオフにします # 冷蔵庫の操作 fridge.turn_on() # 冷蔵庫をオンにします fridge.check_status() # 冷蔵庫の電源状態を確認します
この部分では、先に作成したクラスを使って家電のインスタンスを2つ作成し、それぞれに対して実際の操作を行っています。
テレビと冷蔵庫を例に、それぞれの電源をオンにしたり、状態を確認したり、必要に応じてオフにしたりしています。
ここで重要なのは、同じクラスから作られたインスタンスでも、それぞれが自分だけの状態(電源のオン・オフ)を持っているという点です。
このように、インスタンスごとのメソッド呼び出しによって、クラスの設計が具体的な動作として機能する様子を確認できます。
メソッドの基本の疑問解消|FAQと用語のまとめ
初心者がつまずきやすいポイントをFAQとしてまとめ、またよく使う専門用語をわかりやすく整理しました。
理解を深めたいときや、ふと疑問に感じたときに役立ててください。
FAQ|メソッドの基本に関するよくある質問
- Q1. メソッドと関数の違いは何ですか?
-
メソッドはクラスに属する関数で、インスタンスに対して動作します。通常、第一引数にselfを取り、オブジェクトの状態を扱う点が関数との大きな違いです。
- Q2. selfって何のために使うのですか?
-
selfはインスタンス自身を指すキーワードで、クラス内部でインスタンス変数や他のメソッドにアクセスするために使われます。Pythonでは明示的に書く必要があります。
- Q3. 複数のメソッドを同じクラスに定義してもいいですか?
-
はい、可能です。むしろ関連する処理は1つのクラスにまとめてメソッドとして整理すると、可読性や再利用性が高くなります。
Python用語集|メソッドの基本に関する用語一覧
今回の記事で出てきた用語・関数などを一覧で紹介します。
このサイトに出てくる 全てのPython用語をまとめた用語集 も活用してください。