こんにちは。
本日は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!
以上です。