プログラミング上達のコツは学習初期段階でとにかく手を動かしてコーディングすることです。
本シリーズでは Python の初学者に向けたコーディング問題を出題します。
今回は クラスの継承とオーバーライド について学習します。コーディング指示に従ってコーディングしてみましょう!
学習の進め方
- プログラム説明および目的を確認し、どのようなプログラムで何を学ぶかイメージしましょう。
- コーディング指示に従ってコーディングをします。
もし分からなければ、コード例を確認しても良いです。 - 自分の出力結果と出力結果例を比較してみましょう。
- コード例を確認し、自分のコードと比較してみましょう。
コード例は「あくまでも例」なので完全に一致する必要はありません。 - 最終的にはコーディング指示だけでコーディングできるよう、繰り返し練習しましょう。
Python コーディング問題1: 動物クラスの継承
プログラム説明
このプログラムは、動物を表現する基底クラスと、それを継承する派生クラスを作成します。基底クラスでは動物の基本的なメソッドを定義し、派生クラスでは特定の動物のメソッドを追加またはオーバーライドします。
目的
このプログラムを通じて、学習者はクラスの継承とメソッドのオーバーライドの基本的な概念を理解し、実際にそれらを使ってコードを作成する方法を学びます。
コーディング指示
新しいPythonファイル animal_inheritance.py
を作成する
- 任意のエディタを開き、新しいファイルを作成します。
- ファイル名を
animal_inheritance.py
として保存します。
動物を表現する Animal
クラスを定義する
Animal
クラスを作成し、以下のメソッドを定義します:make_sound
メソッド:print
で “Some generic animal sound” と表示します。
Animal
クラスを継承する Dog
クラスを定義する
Dog
クラスを作成し、以下のメソッドを定義します:make_sound
メソッド:print
で “Woof” と表示します(メソッドのオーバーライド)。fetch
メソッド:print
で “Dog is fetching!” と表示します。
メインプログラムを作成する
Animal
クラスのインスタンスを生成し、make_sound
メソッドを呼び出します。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
を作成する
- 任意のエディタを開き、新しいファイルを作成します。
- ファイル名を
vehicle_inheritance.py
として保存します。
乗り物を表現する Vehicle
クラスを定義する
Vehicle
クラスを作成し、以下のメソッドを定義します:move
メソッド:print
で “The vehicle is moving” と表示します。
Vehicle
クラスを継承する Car
クラスを定義する
Car
クラスを作成し、以下のメソッドを定義します:move
メソッド:print
で “The car is driving” と表示します(メソッドのオーバーライド)。honk
メソッド:print
で “The car is honking” と表示します。
メインプログラムを作成する
Vehicle
クラスのインスタンスを生成し、move
メソッドを呼び出します。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
を作成する
- 任意のエディタを開き、新しいファイルを作成します。
- ファイル名を
music_player.py
として保存します。
音楽プレイヤーを表現する MusicPlayer
クラスを定義する
MusicPlayer
クラスを作成し、以下のメソッドを定義します:play
メソッド:print
で “Playing music” と表示します。
MusicPlayer クラスを継承する MP3Player
クラスを定義する
MP3Player
クラスを作成し、以下のメソッドを定義します:play
メソッド:print
で “Playing MP3 music” と表示します(メソッドのオーバーライド)。play_parent
メソッド:super().play()
を使って親クラスのplay
メソッドを呼び出します。
メインプログラムを作成する
MusicPlayer
クラスのインスタンスを生成し、play
メソッドを呼び出します。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
を作成する
- 任意のエディタを開き、新しいファイルを作成します。
- ファイル名を
home_appliance.py
として保存します
家電製品を表現する Appliance
クラスを定義する
Appliance
クラスを作成し、以下のメソッドを定義します:turn_on
メソッド:print
で “The appliance is now on” と表示します。
Appliance
クラスを継承する WashingMachine
クラスを定義する
WashingMachine
クラスを作成し、以下のメソッドを定義します:turn_on
メソッド:print
で “The washing machine is now on” と表示します(メソッドのオーバーライド)。start_wash
メソッド:print
で “Starting the wash cycle” と表示します。turn_on_parent
メソッド:super().turn_on()
を使って親クラスのturn_on
メソッドを呼び出します。
メインプログラムを作成する
Appliance
クラスのインスタンスを生成し、turn_on
メソッドを呼び出します。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" と表示される
コメント