アカデミック

【第15回 継承/オーバーライド】元文系京大生による超初心者向けPython入門講座

本記事は,python入門講座シリーズの内容になります。その他の記事は,こちらの「Python入門講座/実践講座まとめ」をご覧ください。ターゲットは主にpythonを使ったことがない人向けで,簡潔で分かりやすい説明を心がけています。

内容に誤りがありましたら,ご指摘いただけますと非常に助かります。

読みたい場所へジャンプ!

今回のお題

クラスを使いまわせるようになろう!

 

写経

まずは,上の写真と同じ内容をセルに書き込んで,実行(Shift+Enter)してみてください。ちなみに,MusicalInstrumentクラスは前回作ったクラスと全く同じです。

 

ポイント

class Equipment(MusicalInstrument):
  
  def __init__(self, name):
  def mouthpiece(self):
  def reed(self):

# ↑↑なんだこのクラスの作り方は??
# もう一度__init__関数(コンストラクタ)を作ってもOKなの??

今回のポイントは,親クラスから機能を引き継いで子クラスを作る方法,そして内部の関数(メソッド)を上書きする方法です。

 

解説

1つのクラスを流用できれば,さらに秩序が保たれたなかでインスタンスを作り出すことが可能になります。何より,新しく同じようなクラスを作るときの手間が省けます。このとき,もとにするクラスを親クラス,新しく生み出すクラスを子クラスと呼びます。親クラスから子クラスを作り出すことを「継承」と呼びます。

class 子クラス(親クラス):

 

子クラスでは,親クラスのメソッドを使うことができます。さらに,同じ関数の名前を定義することで関数の上書きをすることができます。このことを「オーバーライド」と呼びます。今回の例では,コンストラクタ(__init__関数)を上書きしています。

# MusicalInstrumentから継承します
class Equipment(MusicalInstrument):
  
  # オーバーライドします
  def __init__(self, name):
    print("今から備品の情報をお伝えします!")
    self.name = name
  # 新しくメソッドを定義します
  def mouthpiece(self):
    self.color = "silver"
    return self.color

  # 新しくメソッドを定義します
  def reed(self):
    self.material = "Arundo_donax"
    return self.material

 

最後は,どのような戻り値が得られるかに注目しながら変数に代入し,必要な情報を表示しています。

equipment = Equipment("sax")
color = equipment.mouthpiece()
material = equipment.reed()
print(color, material)
ABOUT ME
zuka
京都大学で機械学習を学んでいます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

※ Please enter your comments in Japanese to prevent spam.