クラスの基本は
クラスの継承とは
一言で表すと
あるクラスをベースとして、追加したいメンバ変数や関数だけを追加し、新しいクラスを定義すること。
用語の整理
継承された元のクラスのことをスーパークラス、継承して新しく作ったクラスをサブクラスといいます。
使用例
実際にコードを見た方が早いと思うので、使用例を確認してみましょう!
以下の例では、動物についてのクラスanimal
をベースに、Cat
クラスを作成しています。
# スーパークラス
class Animal():
def __init__(self, type: str = None):
self.type = type
# 鳴くメソッド(デフォルトは"にゃー")
def cry(self, sound: str = 'にゃー'):
print(sound)
# サブクラス
class Cat(Animal):
def __init__(self, name: str):
super().__init__(type='cat')
self.name = name
print(f'{self.type}の名前は{name}です')
上記の例でのsuper().__init__(type='cat')
は、Cat
クラスから見てスーパークラスであるAnimal
クラスの__init__
関数を呼び出している。
インスタンスを作成してみると
cat = Cat(name='tama')
Cat
クラスの__init__
クラスが呼び出され、以下のように出力される。
catの名前はtamaです
Animal
クラスを継承しているため、Animal
クラスのメソッドであるcry
メソッドも使用できる。
cat.cry() # 出力:にゃー
オーバーライド
オーバーライドとは、スーパークラスのメソッドを上書きすることです。
オーバーライドしたいメソッドをサブクラスでも同じメソッド名で定義することにより実現できます。
# スーパークラス
class Animal():
def __init__(self, type: str = None):
self.type = type
# 鳴くメソッド(デフォルトは"にゃー")
def cry(self, sound: str = 'にゃー'):
print(sound)
# サブクラス
class Cat(Animal):
def __init__(self, name: str):
super().__init__(type='cat')
self.name = name
print(f'{self.type}の名前は{name}です')
# 鳴くメソッド(オーバーライド)
def cry(self, sound: str = 'にゃー'):
print(sound * 2)
# インスタンス生成
cat = Cat(name='tama')
cat.cry() # にゃーにゃー
上記の例では、cry
メソッドをオーバーライドしています。
まとめ
このブログでは、クラスの継承について簡単に説明させていただきました。参考になれば幸いです。