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

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:メソッドの定義と使用

この記事の練習問題で使用する知識:
レッスン1~4の知識クラスの定義と使用__init__メソッドメソッドの定義と使用カプセル化プロパティクラスの継承メソッドのオーバーライド静的メソッド

<<前の問題 問題集Top 次の問題>>

Pythonの「メソッド」とは

この章ではPythonにおける「メソッド」の意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。



Pythonでは、クラスの中で定義される関数をメソッドと呼びます。

メソッドを使うことで、オブジェクト指向プログラミングに基づいて、オブジェクト(インスタンス)が持つデータや振る舞いを定義できます。

今回は「車」を題材にして、メソッドの定義と使い方を見ていきます。

メソッドとは?

メソッドとはクラスの内部で定義される関数のことです。

関数と同様に処理をまとめることができますが、メソッドは特定のインスタンスに紐づけられており、そのインスタンスの状態を操作することができます。

例えば「車」をクラスとして考えると、その車が走ったり止まったりする動作をメソッドとして定義できます。

メソッドはオブジェクト指向プログラミングの基本となる概念であり、インスタンスに行動を与える役割を持ちます。

メソッドの定義

メソッドは次のように定義されます。

まずクラスの中にメソッドを記述し、インスタンスがそのメソッドを呼び出せるようにします。

class Car:
    def start(self):
        print("車がエンジンをかけました")

このコードではCar クラスの中に start というメソッドが定義されています。

start メソッドは「車がエンジンをかけました」というメッセージを表示します。

メソッドは必ず最初に self という引数を持ちますが、これはそのメソッドがどのインスタンスに対して実行されているかを示すものです。

メソッドの使用例

次にCar クラスを使ってメソッドを呼び出す方法を説明します。

まずクラスからインスタンス(車)を作成し、そのインスタンスに対してメソッドを呼び出します。

class Car:
    def __init__(self, brand, model):
        self.brand = brand
        self.model = model

    def start(self):
        print(f"{self.brand} {self.model}がエンジンをかけました")

    def stop(self):
        print(f"{self.brand} {self.model}が停止しました")

# Carクラスのインスタンスを作成
car1 = Car("トヨタ", "プリウス")
car2 = Car("ホンダ", "シビック")

# メソッドを呼び出して、車を操作
car1.start()  # 出力: トヨタ プリウスがエンジンをかけました
car2.start()  # 出力: ホンダ シビックがエンジンをかけました

car1.stop()  # 出力: トヨタ プリウスが停止しました
car2.stop()  # 出力: ホンダ シビックが停止しました

このコードでは、Car クラスに2つのメソッド、startstop を定義しています。

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

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

メソッドの呼び出し

メソッドを呼び出すにはクラスから作成されたインスタンスを使います。

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

またstop メソッドを呼び出すことで、その車が停止したことを示すメッセージが表示されます。

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

まとめ

メソッドはクラスに対して定義され、インスタンスに特定の機能や振る舞いを与える重要な要素です。

self を使ってインスタンスのデータにアクセスし、メソッドの中でインスタンスの動作を定義することで、オブジェクト指向プログラミングの基礎を構築できます。

これからPythonでクラスとメソッドを使って、より複雑なプログラムを作成していく上で、今回の基本をしっかり押さえておきましょう。

練習問題5-2:メソッドの定義と使用を学ぼう:家電製品の操作プログラム

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

家電製品には「オン」と「オフ」の2つの状態があり、電源の状態を確認したり、操作を行ったりすることができます。

また家電製品のブランドや消費電力も管理します。以下の要件に従って、クラスとメソッドを使ったプログラムを実装してください。

この問題の要件

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

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

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

*****↓↓正解コードの実行結果の例↓↓*****

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

この問題を解くヒント

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

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

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

1:クラスApplianceの定義
  □ __init__メソッドの定義
  □ □ 変数brandにブランド名を代入
  □ □ 変数powerに消費電力を代入
  □ □ 変数is_onに電源の状態を代入
  □ turn_onメソッドの定義
  □ □ if文にて電源がオフであるか判定
  □ □ □ 真の場合、電源をオンにし、メッセージを出力
  □ □ else文にて電源が既にオンである場合、メッセージを出力
  □ turn_offメソッドの定義
  □ □ if文にて電源がオンであるか判定
  □ □ □ 真の場合、電源をオフにし、メッセージを出力
  □ □ else文にて電源が既にオフである場合、メッセージを出力
  □ check_statusメソッドの定義
  □ □ if-else文を使用して電源状態を確認し、メッセージを出力
2:Applianceクラスのインスタンスtvの作成
3:Applianceクラスのインスタンスfridgeの作成
4:tvインスタンスのcheck_statusメソッドの呼び出し
5:tvインスタンスのturn_onメソッドの呼び出し
6:tvインスタンスのcheck_statusメソッドの呼び出し
7:tvインスタンスのturn_offメソッドの呼び出し
8:fridgeインスタンスのturn_onメソッドの呼び出し
9:fridgeインスタンスのcheck_statusメソッドの呼び出し

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

# 家電製品クラスを定義します
class Appliance:
    def __init__(self, brand, power, is_on=False):
        """【穴埋め問題1】
        ここで家電製品のブランド、消費電力、電源の状態を定義するコードを書いてください。
        """

    def turn_on(self):
        """【穴埋め問題2】
        ここで家電製品をオンにするコードを書いてください。
        """

    def turn_off(self):
        """【穴埋め問題3】
        ここで家電製品をオフにするコードを書いてください。
        """

    def check_status(self):
        """【穴埋め問題4】
        ここで家電製品の電源状態を確認するコードを書いてください。
        """

# 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  # 電源がオンかオフかの状態

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

正解コードの解説

このコードでは家電製品を操作するクラスApplianceを作成し、インスタンスを通じて家電製品のオン・オフ状態を管理する方法を学びます。

メソッドを使って、家電製品の状態を変える基本的な操作を理解しましょう。

クラスApplianceの定義

class Appliance:
    def __init__(self, brand, power, is_on=False):
  • ここでは、家電製品の情報を格納するためのApplianceクラスを定義しています。
  • __init__メソッドはクラスの「コンストラクタ」と呼ばれ、インスタンスを作成するときに呼び出されます。このメソッドは、家電製品のブランド、消費電力、電源状態を初期化します。
  • selfは、クラス内のインスタンスを指すキーワードです。selfを通じて、各インスタンスが持つデータにアクセスできます。

メソッドturn_onturn_offの定義

    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}は既にオフになっています")
  • turn_onメソッドは、家電製品がオフのときに電源をオンにするメソッドです。電源が既にオンのときは「既にオンになっています」とメッセージを表示します。
  • turn_offメソッドは、turn_onと逆で、電源をオフにする機能を持っています。
  • これらのメソッドは、インスタンスが持つis_onという変数を使って電源の状態を操作します。if文を使って電源の状態を確認し、適切な動作を行います。

メソッドcheck_statusの定義

    def check_status(self):
        status = "オン" if self.is_on else "オフ"
        print(f"{self.brand}の電源状態は{status}です")
  • check_statusメソッドは、家電製品の電源がオンかオフかを確認し、その状態を表示します。
  • if-else式を使ってis_onの状態に応じて、メッセージを出力します。このメソッドは家電製品の状態を簡単に確認できる便利なメソッドです。

インスタンスの作成と操作

tv = Appliance("テレビ", 150)
fridge = Appliance("冷蔵庫", 200)

tvという名前のインスタンスを作成し、Applianceクラスを使って「テレビ」のブランド、消費電力150W、初期状態はオフに設定します。

同様に、fridgeという冷蔵庫のインスタンスも作成します。

家電製品の操作

tv.check_status()  # 初期状態ではオフのはずです
tv.turn_on()  # テレビをオンにします
tv.check_status()  # 電源がオンになったか確認します
tv.turn_off()  # テレビをオフにします

tvインスタンスのメソッドを使って、テレビの状態を確認し、オンにしたりオフにしたりします。

check_statusで確認すると、初期状態ではオフであることが確認できます。

まとめ

今回のコードでは、Pythonのクラスとメソッドを使って家電製品の操作をシミュレーションしました。

クラス内のメソッドを使うことで、インスタンスごとに動作を管理しやすくなります。

これにより、Pythonにおけるオブジェクト指向プログラミングの基礎を学ぶことができました。これからも、クラスとメソッドを活用して、より複雑なプログラムに挑戦してみましょう!

<<前の問題 問題集Top 次の問題>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Python記事トップへ戻る
    トップページへ戻る