オーバーライド

Pythonのオブジェクト指向プログラミングにおける**「オーバーライド(override)」**とは、親クラス(スーパークラス)で定義されたメソッドを、子クラス(サブクラス)で再定義して上書きすることを指します。オーバーライドを使うことで、親クラスの基本的な振る舞いを引き継ぎつつ、子クラスでその振る舞いを変更・拡張することが可能になります。


オーバーライドの特徴

  • 親クラスと同名のメソッドを子クラスで定義することで実現されます。

  • メソッド名、引数の数や型(Pythonでは型チェックは緩やかですが)を一致させる必要があります。

  • 子クラスでオーバーライドされたメソッドは、親クラスのメソッドを上書きします。

  • 必要に応じて、super()を使うことで親クラスのメソッドを呼び出すこともできます。


基本的な構文と例

python
class Animal: def speak(self): print("動物が鳴きます") class Dog(Animal): def speak(self): # オーバーライド print("犬がワンと鳴きます") a = Animal() a.speak() # 出力: 動物が鳴きます d = Dog() d.speak() # 出力: 犬がワンと鳴きます(オーバーライドされた)

この例では、Dog クラスが Animal クラスを継承しており、speak() メソッドをオーバーライドしています。


super() を使ったオーバーライドの拡張

子クラスでオーバーライドする際に、親クラスの処理を一部利用したい場合は super() を使います。

python
class Dog(Animal): def speak(self): super().speak() # 親クラスの speak を呼び出す print("犬がさらにワンと鳴きます")

このようにすると、親クラスの処理に加えて、子クラスの追加処理も実行できます。


オーバーライドの利点

  • **ポリモーフィズム(多態性)**を実現できる。

  • 親クラスのコードを再利用しつつ、個別の振る舞いを持たせることができる。

  • プログラムの柔軟性と拡張性を向上させる。


補足:オーバーロードとの違い

  • オーバーライド:親クラスのメソッドを子クラスで再定義すること。

  • オーバーロード:同じメソッド名で引数の数や型が異なる複数のメソッドを定義すること(Pythonでは厳密なオーバーロードはサポートされていませんが、デフォルト引数や可変長引数で類似の機能を実現できます)。

生成日:2025/05/03