10.3.1継承の基本

構文 クラスの継承
class 派生クラス名(規定クラス名、…)
…派生クラスの定義…

>>> 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}は働いています。')
...
>>> if __name__ == '__main__':
...    bp = BusinessPerson('太郎', '山田')
...    bp.show()
...    bp.work()
...
私の名前は山田太郎です!
山田太郎は働いています。
>>>
  1. 1.最初に Person という名前のクラスを定義しています。このクラスは、個々の人物を表現するためのものです。 __init__ メソッドは、クラスのインスタンスが作成されるときに呼び出される特別なメソッドで、ここでは firstnamelastname という二つのパラメータを取ります。これらのパラメータは、インスタンス(具体的な人物)が作成されるときに提供されます。また、show メソッドは、その人物の名前を表示するためのものです。


  2. 2.次に BusinessPerson という名前の別のクラスを定義しています。これは Person クラスを継承しており、すなわち BusinessPersonPerson の全ての特性(メソッドや属性)を引き継いでいます。さらに、BusinessPerson クラスには独自の work メソッドがあり、このメソッドはそのビジネスパーソンが働いていることを表示します。


  3. 3.最後に、このコードが直接実行されたとき(すなわち、このコードがスクリプトとして実行されたとき、または対話型シェルで直接実行されたとき)、if __name__ == '__main__': という行が真となります。その下のコードブロックが実行されます。


  4. 4.bp = BusinessPerson('太郎', '山田')
    という行で、新しい BusinessPerson のインスタンスを作成し、bp という変数に代入しています。このインスタンスは '太郎' と '山田' という名前を持つ人物を表現します。


  5. 5.次の行 bp.show() で、show メソッドを呼び出しています。このメソッドは Person クラスに定義されているため、そのサブクラスである BusinessPerson のインスタンスでも使用できます。このメソッドは、その人物の名前を表示します。


  6. 6.最後に bp.work() という行で、work メソッドを呼び出しています。このメソッドは BusinessPerson クラスに定義されており、そのビジネスパーソンが働いていることを表示します。


・命名は基底クラスよりも具体的に

・複数の基底クラスも可能

・派生クラスにメンバーを追加する