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

ながみえ
【Python学習記事のアイキャッチ画像】Lesson5-2 メソッドの基本を理解しよう

一つ前の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学習記事のアイキャッチ画像】Lesson5-1 クラスの基本を理解しよう

Pythonの記事一覧

Python学習カテゴリの親ページ用アイキャッチ画像(テキスト&問題集)、記事一覧へのリンク案内

次のページ>>

【Python学習記事のアイキャッチ画像】Lesson5-3 カプセル化を理解しよう

クラスを動かすしくみ|メソッドの基本を学ぼう

クラスに機能(動作)を追加するために欠かせないのが「メソッド」です。

これはオブジェクトが持つ振る舞いを定義するためのしくみで、関数との違いを理解しながら使いこなすことが重要です。

この知識を身につけることで、クラスに応じた処理をオブジェクト単位で整理・実行できるようになり、より柔軟で再利用しやすいコードを書けるようになります。

Pythonで本格的なオブジェクト指向設計に進むための土台となる内容ですので、ぜひ最後までじっくり取り組んでみてください。

【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つのメソッド、startstop を定義しています。

それぞれのメソッドはインスタンスの brandmodel に基づいて、エンジンの始動と停止の動作を表示します。

car1car2 という2台の車をインスタンス化し、それぞれの車でメソッドを呼び出すことができます。

上記の例でcar1.start()となっているように、メソッドはインスタンス名の後にドットとメソッド名を付けて呼び出します。

このようにインスタンスごとに異なるデータを持たせながら、それぞれのインスタンスが 同じメソッドを使って異なる動作 を行うことができます。

まとめ|クラスに“動き”を与えよう

【初心者向け】Pythonのオブジェクト指向を分かりやすくまとめた概念図。 特にクラスの継承、オーバーライド、抽象クラス、ミックスインクラス、データクラス、静的メソッドの関係性を視覚的に理解できるようまとめている。

この記事では、クラスに紐づく関数「メソッド」の基本について学びました。

関数との違いを意識しながら、self を使ってインスタンス変数にアクセスしたり、クラスに機能を追加する方法を理解できたはずです。

これにより、オブジェクト指向における「データと動作のまとまり」という考え方が、より実感を伴って理解できるようになったことでしょう。

自分だけのクラスを作り、そこに動きを持たせられるようになった今、Pythonを使ってより複雑な処理や本格的なアプリケーションの設計に一歩近づきました。

この調子で、ステップアップを続けていきましょう。

Q
サイト改善アンケート|ご意見をお聞かせください(1分で終わります)

本サイトでは、みなさまの学習をよりサポートできるサービスを目指しております。
そのため、みなさまの「プログラミングを学習する理由」などをアンケート形式でお伺いしています。

1分だけ、ご協力いただけますと幸いです。

【Python】サイト改善アンケート
1.このサイトをどのように活用していますか?また、今後どのように活用したいですか?
5.気になっているサービス・商品があれば教えてください。
(複数選択可)
※ 特定の記事に関する内容の場合は、記事番号(Python Lesson〇-〇)をご記入願います。 また、ご質問はここではなく問い合わせフォームからお願いします。

練習問題:メソッドを使ってみよう

この記事で学習した「メソッドの基本」を復習する練習問題に挑戦しましょう。

【Python】勉強猫がノートパソコンに向かい、練習問題に挑戦する様子。記事内の休憩用イラスト

問題|家電製品の操作プログラムを作ろう

家電製品の電源操作をシミュレートするプログラムを作成しましょう。

この問題ではクラスとメソッドを使って、複数の家電にそれぞれの動作(オン・オフ・状態確認)を定義し、個別に操作できるようにします。

以下の要件に従ってコードを完成させてください。

  • クラス Appliance を作成し、__init__ メソッドでブランド、消費電力、電源の状態(デフォルトでオフ)を定義すること。
  • メソッド turn_on を作成し、電源がオフのときにオンにし、メッセージを表示すること。既にオンの場合はその旨を表示すること。
  • メソッド turn_off を作成し、電源がオンのときにオフにし、メッセージを表示すること。既にオフの場合はその旨を表示すること。
  • メソッド check_status を作成し、現在の電源状態(オンかオフか)を表示すること。
  • インスタンスを2つ作成し、それぞれの操作を行い、結果を表示すること。

ただし、以下のような実行結果となるコードを書くこと。

テレビの電源状態はオフです
テレビがオンになりました
テレビの電源状態はオンです
テレビがオフになりました
冷蔵庫がオンになりました
冷蔵庫の電源状態はオンです

ヒント|難しいと感じる人だけ見よう

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

Q
ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:家電製品の情報と初期状態を定義するクラスを作成
 ・クラスは class というキーワードで始めて定義します
 ・初期化メソッドの名前は __init__ と決まっています
 ・インスタンスごとの情報は self を使って記録します

2:電源がオフのときに家電をオンにするメソッドを定義
 ・メソッドは def を使って定義します
 ・状態を確認するには if 文を使います
 ・状態の変更には self.変数名 = 値 を使います

3:電源がオンのときに家電をオフにするメソッドを定義
 ・状態がオンかどうかは if self.変数名 で判定できます
 ・状態の切り替えには TrueFalse を使います

4:現在の電源状態を確認して表示するメソッドを定義
 ・状態によって異なる値を代入したいときは if ... else ... を使えます
 ・self.変数名 を使ってインスタンスの情報にアクセスします

5:家電インスタンスを使って、メソッドを呼び出し操作を実行
 ・クラスからオブジェクトを作るときは「クラス名(値, 値, …)」の形で書きます
 ・作ったオブジェクトに対しては「インスタンス名.メソッド名()」で操作できます
 ・同じメソッドでも、インスタンスによって動作の対象が変わります

Q
ヒント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()	# 冷蔵庫の電源状態を確認します

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

解答例|家電クラスで電源操作プログラム

例えば以下のようなプログラムが考えられます。

Q
正解コード
# 家電製品クラスを定義します
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()	# 冷蔵庫の電源状態を確認します

解答例の解説|家電クラスで電源操作プログラムの考え方

解答例の詳細解説は以下の通りです。

Q
詳細解説

家電製品クラスを定義

# 家電製品クラスを定義します
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つ作成し、それぞれに対して実際の操作を行っています。
    テレビと冷蔵庫を例に、それぞれの電源をオンにしたり、状態を確認したり、必要に応じてオフにしたりしています。
    ここで重要なのは、同じクラスから作られたインスタンスでも、それぞれが自分だけの状態(電源のオン・オフ)を持っているという点です。
    このように、インスタンスごとのメソッド呼び出しによって、クラスの設計が具体的な動作として機能する様子を確認できます。

    もっと分かりやすい学習サイトにするために

    この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

    世界一わかりやすいPython学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

    <<前のページ

    【Python学習記事のアイキャッチ画像】Lesson5-1 クラスの基本を理解しよう

    Pythonの記事一覧

    Python学習カテゴリの親ページ用アイキャッチ画像(テキスト&問題集)、記事一覧へのリンク案内

    次のページ>>

    【Python学習記事のアイキャッチ画像】Lesson5-3 カプセル化を理解しよう

    メソッドの基本の疑問解消|FAQと用語のまとめ

    初心者がつまずきやすいポイントをFAQとしてまとめ、またよく使う専門用語をわかりやすく整理しました。

    理解を深めたいときや、ふと疑問に感じたときに役立ててください。

    FAQ|メソッドの基本に関するよくある質問

    Q
    Q1. メソッドと関数の違いは何ですか?

    メソッドはクラスに属する関数で、インスタンスに対して動作します。通常、第一引数にselfを取り、オブジェクトの状態を扱う点が関数との大きな違いです。

    Q
    Q2. selfって何のために使うのですか?

    selfはインスタンス自身を指すキーワードで、クラス内部でインスタンス変数や他のメソッドにアクセスするために使われます。Pythonでは明示的に書く必要があります。

    Q
    Q3. 複数のメソッドを同じクラスに定義してもいいですか?

    はい、可能です。むしろ関連する処理は1つのクラスにまとめてメソッドとして整理すると、可読性や再利用性が高くなります。

    Python用語集|メソッドの基本に関する用語一覧

    今回の記事で出てきた用語・関数などを一覧で紹介します。

    このサイトに出てくる 全てのPython用語をまとめた用語集 も活用してください。

    Python用語定義・使い方の概要解説記事へのリンク
    クラスデータとその操作をまとめたオブジェクトの設計図で、属性やメソッドを定義できる構造体Lesson5-1
    コンストラクタクラスのインスタンス生成時に自動で呼び出される初期化メソッド。Pythonでは __init__ が該当Lesson5-1
    メソッドクラス内で定義され、インスタンスから呼び出す関数。通常は第1引数に self を取る本記事
    記事URLをコピーしました