10.3.2メソッドのオーバーライド

オーバーライドとは、オブジェクト指向プログラミングにおいて、スーパークラス(親クラス)で定義されたメソッドをサブクラス(子クラス)で新たに定義し直すことを指します。

この概念は、継承と密接に関連しています。継承では、サブクラスはスーパークラスのすべてのメソッドと属性を引き継ぎます。しかし、特定のメソッドについてはサブクラスで独自の動作が必要な場合があります。このとき、サブクラスでそのメソッドを再定義(オーバーライド)することで、独自の動作を実現します。

例えば、動物を表す Animal クラスがあり、その中に sound というメソッドがあるとします。これを継承する Dog クラスと Cat クラスがある場合、Dog クラスの sound メソッドでは "Woof!" を、Cat クラスの sound メソッドでは "Meow!" を出力するように、それぞれオーバーライドすることができます。これにより、Dog インスタンスと Cat インスタンスがそれぞれ適切な音を出すことが可能になります。


>>> class Person:
...    def __init__(self, firstname, lastname):
...       self.firstname = firstname
...       self.lastname = lastname
...    def show(self):
...       print(f'私の名前は{self.lastname}{self.firstname}です!')
...
>>> #Personを継承したBusinessPersonクラスを定義
>>> class BusinessPerson(Person):
...    def work(self):
...       print(f'{self.lastname}{self.firstname}は働いています。')
...
>>> class ElieteBusinessPerson(BusinessPerson):
...    def work(self):
...       print(f'{self.lastname}{self.firstname}はバリバリ働いています。')
...
>>> if __name__ == '__main__':
...    bp = ElieteBusinessPerson('太郎', '山田')
...    bp.show()
...    bp.work()
...
私の名前は山田太郎です!
山田太郎はバリバリ働いています。
>>>

このプログラムはPythonのクラスと継承について示しています。以下にその各ステップを詳しく説明します:

  1. 1.Personクラスの定義: Personという名前のクラスが定義されています。このクラスには、初期化関数 __init__とメソッド showが定義されています。


    • ・__init__
      関数: この関数は、新たなPersonオブジェクトが作成されるときに自動的に呼び出されます。引数としてself(オブジェクト自体への参照)と、firstnamelastname(それぞれ名前と姓)を受け取り、オブジェクトの属性としてこれらを保存します。

    • ・show
      メソッド: このメソッドはPersonオブジェクトの名前を表示します。print関数を使って、self.lastnameself.firstnameを結合して表示します。

  2. 2.BusinessPerson
    クラスの定義: このクラスはPersonクラスを継承しており、Personクラスの全ての属性とメソッドを引き継ぎます。加えて、新たにworkメソッドを定義しています。


    • ・work
      メソッド: このメソッドは、そのBusinessPersonオブジェクトが働いていることを表示します。

  3. 3.EliteBusinessPerson
    クラスの定義: このクラスはBusinessPersonクラスを継承し、workメソッドをオーバーライド(上書き)します。オーバーライドされたworkメソッドは、そのEliteBusinessPersonオブジェクトが「バリバリ働いています」と表示します。


  4. 4.メインの実行部分: ここでは、EliteBusinessPersonのインスタンスを作成し、そのshowメソッドとworkメソッドを呼び出しています。showメソッドはPersonクラスから引き継いだもので、workメソッドはEliteBusinessPersonでオーバーライドしたものです。

以上がこのコードの各部分の説明です。このプログラムはPythonのクラス、継承、オーバーライドの概念を示しています。