Python コーディング問題 第25回 『オーバーライド』

プログラミング上達のコツは学習初期段階でとにかく手を動かしてコーディングすることです。
本シリーズでは Python の初学者に向けたコーディング問題を出題します。
今回は クラスの継承とオーバーライド について学習します。コーディング指示に従ってコーディングしてみましょう!

目次

学習の進め方

  1. プログラム説明および目的を確認し、どのようなプログラムで何を学ぶかイメージしましょう。
  2. コーディング指示に従ってコーディングをします。
    もし分からなければ、コード例を確認しても良いです。
  3. 自分の出力結果と出力結果例を比較してみましょう。
  4. コード例を確認し、自分のコードと比較してみましょう。
    コード例は「あくまでも例」なので完全に一致する必要はありません。
  5. 最終的にはコーディング指示だけでコーディングできるよう、繰り返し練習しましょう。

Python コーディング問題1: 動物クラスの継承

プログラム説明

このプログラムは、動物を表現する基底クラスと、それを継承する派生クラスを作成します。基底クラスでは動物の基本的なメソッドを定義し、派生クラスでは特定の動物のメソッドを追加またはオーバーライドします。

目的

このプログラムを通じて、学習者はクラスの継承とメソッドのオーバーライドの基本的な概念を理解し、実際にそれらを使ってコードを作成する方法を学びます。

コーディング指示

新しいPythonファイル animal_inheritance.py を作成する

  1. 任意のエディタを開き、新しいファイルを作成します。
  2. ファイル名を animal_inheritance.py として保存します。

動物を表現する Animal クラスを定義する

  1. Animal クラスを作成し、以下のメソッドを定義します:
  2. make_sound メソッド:print で “Some generic animal sound” と表示します。

Animal クラスを継承する Dog クラスを定義する

  1. Dog クラスを作成し、以下のメソッドを定義します:
  2. make_sound メソッド:print で “Woof” と表示します(メソッドのオーバーライド)。
  3. fetch メソッド:print で “Dog is fetching!” と表示します。

メインプログラムを作成する

  1. Animal クラスのインスタンスを生成し、make_sound メソッドを呼び出します。
  2. Dog クラスのインスタンスを生成し、make_sound メソッドと fetch メソッドを呼び出します。

Python コード例

タップしてコードを表示
# 基底クラス Animal を定義
class Animal:
    """動物を表現するクラス"""

    # 動物の一般的な音を出すメソッド
    def make_sound(self):
        print("Some generic animal sound")

# 派生クラス Dog を定義
class Dog(Animal):
    """犬を表現するクラス"""

    # オーバーライドして犬の音を出すメソッド
    def make_sound(self):
        print("Woof")

    # 犬が物を取ってくる動作を表現するメソッド
    def fetch(self):
        print("Dog is fetching!")

# メインプログラム
# Animal クラスのインスタンスを生成してメソッドを呼び出す
animal = Animal()
animal.make_sound()

# Dog クラスのインスタンスを生成してメソッドを呼び出す
dog = Dog()
dog.make_sound()  # オーバーライドされたメソッドが呼び出される
dog.fetch()  # Dog クラスに追加されたメソッドが呼び出される

Python コーディング問題2: 乗り物クラスの継承とオーバーライド

プログラム説明

このプログラムは、乗り物を表現する基底クラスと、それを継承する派生クラスを作成します。基底クラスでは乗り物の基本的なメソッドを定義し、派生クラスでは特定の乗り物のメソッドを追加またはオーバーライドします。

目的

このプログラムを通じて、学習者はクラスの継承とメソッドのオーバーライドの基本的な概念を理解し、実際にそれらを使ってコードを作成する方法を学びます。

コーディング指示

新しいPythonファイル vehicle_inheritance.py を作成する

  1. 任意のエディタを開き、新しいファイルを作成します。
  2. ファイル名を vehicle_inheritance.py として保存します。

乗り物を表現する Vehicle クラスを定義する

  1. Vehicle クラスを作成し、以下のメソッドを定義します:
  2. move メソッド:print で “The vehicle is moving” と表示します。

Vehicle クラスを継承する Car クラスを定義する

  1. Car クラスを作成し、以下のメソッドを定義します:
  2. move メソッド:print で “The car is driving” と表示します(メソッドのオーバーライド)。
  3. honk メソッド:print で “The car is honking” と表示します。

メインプログラムを作成する

  1. Vehicle クラスのインスタンスを生成し、move メソッドを呼び出します。
  2. Car クラスのインスタンスを生成し、move メソッドと honk メソッドを呼び出します。

Python コード例

タップしてコード例を表示
# 基底クラス Vehicle を定義
class Vehicle:
    """乗り物を表現するクラス"""

    # 乗り物の動きを表現するメソッド
    def move(self):
        print("The vehicle is moving")

# 派生クラス Car を定義
class Car(Vehicle):
    """車を表現するクラス"""

    # オーバーライドして車の動きを表現するメソッド
    def move(self):
        print("The car is driving")

    # 車のクラクションを表現するメソッド
    def honk(self):
        print("The car is honking")

# メインプログラム
# Vehicle クラスのインスタンスを生成してメソッドを呼び出す
vehicle = Vehicle()
vehicle.move()

# Car クラスのインスタンスを生成してメソッドを呼び出す
car = Car()
car.move()  # オーバーライドされたメソッドが呼び出される
car.honk()  # Car クラスに追加されたメソッドが呼び出される

Python コーディング問題3: 音楽プレイヤーのクラス設計

プログラム説明

このプログラムは、音楽プレイヤーの基底クラスと、それを継承する派生クラスを作成します。基底クラスで再生の基本的な機能を提供し、派生クラスで具体的な再生方法を実装します。さらに、派生クラスで基底クラスのメソッドをオーバーライドし、必要に応じて親クラスのメソッドを呼び出します。

目的

このプログラムを通じて、学習者はクラスの継承、メソッドのオーバーライド、データ隠蔽、および super() を使用して親クラスのメソッドを明示的に呼び出す方法を学びます。

コーディング指示

新しいPythonファイル music_player.py を作成する

  1. 任意のエディタを開き、新しいファイルを作成します。
  2. ファイル名を music_player.py として保存します。

音楽プレイヤーを表現する MusicPlayer クラスを定義する

  1. MusicPlayer クラスを作成し、以下のメソッドを定義します:
  2. play メソッド:print で “Playing music” と表示します。

MusicPlayer クラスを継承する MP3Player クラスを定義する

  1. MP3Player クラスを作成し、以下のメソッドを定義します:
  2. play メソッド:print で “Playing MP3 music” と表示します(メソッドのオーバーライド)。
  3. play_parent メソッド:super().play() を使って親クラスの play メソッドを呼び出します。

メインプログラムを作成する

  1. MusicPlayer クラスのインスタンスを生成し、play メソッドを呼び出します。
  2. MP3Player クラスのインスタンスを生成し、play メソッドと play_parent メソッドを呼び出します。

コード例

タップしてコード例を表示
# 基底クラス MusicPlayer を定義
class MusicPlayer:
    """音楽プレイヤーを表現するクラス"""

    # 音楽を再生するメソッド
    def play(self):
        print("Playing music")

# 派生クラス MP3Player を定義
class MP3Player(MusicPlayer):
    """MP3プレイヤーを表現するクラス"""

    # オーバーライドしてMP3音楽を再生するメソッド
    def play(self):
        print("Playing MP3 music")

    # 親クラスのメソッドを呼び出すメソッド
    def play_parent(self):
        super().play()

# メインプログラム
# MusicPlayer クラスのインスタンスを生成してメソッドを呼び出す
player = MusicPlayer()
player.play()  # "Playing music" と表示される

# MP3Player クラスのインスタンスを生成してメソッドを呼び出す
mp3_player = MP3Player()
mp3_player.play()  # "Playing MP3 music" と表示される
mp3_player.play_parent()  # "Playing music" と表示される

Python コーディング問題4: 家電製品のクラス設計

プログラム説明

このプログラムは、家電製品の基底クラスと、それを継承する派生クラスを作成します。基底クラスで基本的な電源操作を提供し、派生クラスで具体的な操作を実装します。さらに、派生クラスで基底クラスのメソッドをオーバーライドし、必要に応じて親クラスのメソッドを呼び出します。

目的

このプログラムを通じて、学習者はクラスの継承、メソッドのオーバーライド、データ隠蔽、および super() を使用して親クラスのメソッドを明示的に呼び出す方法を学びます。

コーディング指示

新しいPythonファイル home_appliance.py を作成する

  1. 任意のエディタを開き、新しいファイルを作成します。
  2. ファイル名を home_appliance.py として保存します

家電製品を表現する Appliance クラスを定義する

  1. Appliance クラスを作成し、以下のメソッドを定義します:
  2. turn_on メソッド:print で “The appliance is now on” と表示します。

Appliance クラスを継承する WashingMachine クラスを定義する

  1. WashingMachine クラスを作成し、以下のメソッドを定義します:
  2. turn_on メソッド:print で “The washing machine is now on” と表示します(メソッドのオーバーライド)。
  3. start_wash メソッド:print で “Starting the wash cycle” と表示します。
  4. turn_on_parent メソッド:super().turn_on() を使って親クラスの turn_on メソッドを呼び出します。

メインプログラムを作成する

  1. Appliance クラスのインスタンスを生成し、turn_on メソッドを呼び出します。
  2. WashingMachine クラスのインスタンスを生成し、turn_on メソッド、start_wash メソッド、turn_on_parent メソッドを呼び出します。

コード例

タップしてコード例を表示
# 基底クラス Appliance を定義
class Appliance:
    """家電製品を表現するクラス"""

    # 家電製品の電源を入れるメソッド
    def turn_on(self):
        print("The appliance is now on")

# 派生クラス WashingMachine を定義
class WashingMachine(Appliance):
    """洗濯機を表現するクラス"""

    # オーバーライドして洗濯機の電源を入れるメソッド
    def turn_on(self):
        print("The washing machine is now on")

    # 洗濯機の洗浄サイクルを開始するメソッド
    def start_wash(self):
        print("Starting the wash cycle")

    # 親クラスのメソッドを呼び出すメソッド
    def turn_on_parent(self):
        super().turn_on()

# メインプログラム
# Appliance クラスのインスタンスを生成してメソッドを呼び出す
appliance = Appliance()
appliance.turn_on()  # "The appliance is now on" と表示される

# WashingMachine クラスのインスタンスを生成してメソッドを呼び出す
washing_machine = WashingMachine()
washing_machine.turn_on()  # "The washing machine is now on" と表示される
washing_machine.start_wash()  # "Starting the wash cycle" と表示される
washing_machine.turn_on_parent()  # "The appliance is now on" と表示される
(Visited 5 times, 1 visits today)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

職業訓練校 エヌ・キャリア・アカデミー 講師の田中です。
主にPythonやC言語を担当しています。
人気の言語であるPythonの多様な活用方法と、その魅力をお伝えする記事を中心に発信していきます。

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次