なんだかGoodVibes

日々の勉強メモです。

【Python】継承

こんにちは。
本日はPythonメモです。

本記事では、Pythonで継承する方法について記載します。

継承

親クラスとしてPerson、子クラスとしてBobを用意します。

class Person():
    def say_hello(self):
        print('Hello!')

class Bob(Person):
    pass

p = Person()
b = Bob()

p.say_hello()
b.say_hello()

実行結果は以下です。

Hello!
Hello!

Bobクラスは、メソッドを定義していないですが
親クラスのsay_hello()メソッドを継承しているので
「Hello!」が出力されます。


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

say_hello()メソッドをBob特有の動作になるようオーバーライドします。

class Person():
    def say_hello(self):
        print('Hello!')

class Bob(Person):
    def say_hello(self):
        print('Hello! I am Bob!')

p = Person()
b = Bob()

p.say_hello()
b.say_hello()

実行結果は以下です。

Hello!
Hello! I am Bob!

出力内容が変わりましたね。


子クラスにメソッドを追加する

Bobクラスに、Bob特有のメソッドを追加します。

class Person():
    def say_hello(self):
        print('Hello!')

class Bob(Person):
    def say_hello(self):
        print('Hello! I am Bob!')

    def sing(self):
        print('LaLaLa~')

b = Bob()
b.sing()

実行結果は以下です。

LaLaLa~

親クラスでsing()を呼び出すとエラーとなります。

class Person():
    def say_hello(self):
        print('Hello!')

class Bob(Person):
    def say_hello(self):
        print('Hello! I am Bob!')

    def sing(self):
        print('LaLaLa~')

p = Person()
p.sing()
Traceback (most recent call last):
  File ..., in <module>
    p.sing()
    ^^^^^^
AttributeError: 'Person' object has no attribute 'sing'


super()の使用

super()を使用すると親クラスのメソッドを呼び出すことができます。

class Person():
    def say_hello(self):
        print('Hello!')

class Bob(Person):
    def say_hello(self):
        super().say_hello()
        print('I am Bob!')

b = Bob()
b.say_hello()

実行結果は以下です。

Hello!
I am Bob!



以上です。