Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでメソッドをオーバーライドする方法|基本の仕組みとコード例

オーバーライドとは?

オーバーライド(上書き)とは、クラスが基底クラス(親クラス)から受け継いだメソッドの実装を、独自の処理に変更できる仕組みのことです。

オーバーライドが重要な理由

オーバーライドはオブジェクト指向プログラミング(OOP)において非常に重要な概念であり、継承の力を最大限に引き出すために欠かせません。メソッドオーバーライドを利用することで、あるクラスは別のクラスの機能を「引き継ぎ」ながら、コードの重複を避けつつ、その一部だけを拡張したりカスタマイズしたりすることができます。つまり、オーバーライドは継承機構の一部なのです。

Pythonでのオーバーライドのやり方

Pythonでは、子クラス内に親クラスと同じ名前のメソッドを定義するだけで、メソッドのオーバーライドが実現します。オブジェクト自身にそのメソッドが定義されている場合、Pythonはまずそのオブジェクト自身の実装を呼び出すため、祖先クラス(親クラス)側の実装は使われなくなります。

以下のコード例を見てみましょう。

class Parent(object):
    def __init__(self):
        self.value = 4

    def get_value(self):
        return self.value


class Child(Parent):
    def get_value(self):
        return self.value + 1

この例では、ChildクラスはParentクラスからvalue属性とget_value()メソッドを継承していますが、get_value()メソッドを独自の実装で上書きしています。

その結果、Childクラスのオブジェクトは、親クラスとは異なる振る舞いをするようになります。

>>> c = Child()
>>> c.get_value()
5

Childクラスにはget_value()が再定義されているため、返り値は4 + 1 = 5となり、親クラスの実装(4をそのまま返す)は呼び出されません。

補足:親クラスの実装を活用したい場合は super() を使う

親クラスの処理を完全に置き換えるのではなく、その結果を利用しながら拡張したい場合は、super()関数が便利です。

class Child(Parent):
    def get_value(self):
        return super().get_value() + 1

このように書くことで、親クラスの元の処理を実行した上で、その結果に追加の処理を行うことができます。オーバーライドは「上書き」だけでなく、「継承しつつの拡張」にも活用できる強力なテクニックです。

  1. C#でメソッドを定義する方法を徹底解説!基本構文とサンプルコード

    メソッド(Method)とは、特定のタスクを実行するためにまとめられた一連のステートメントの集まりです。すべてのC#プログラムには、Mainという名前のメソッドを持つクラスが必ず1つ以上含まれています。 C#におけるメソッド定義の基本構文 メソッドを定義するということは、その構造を構成する各要素を宣言することにほかなりません。C#でメソッドを定義する際の基本構文は以下の通りです。 <アクセス修飾子> <戻り値の型> <メソッド名>(パラメータリスト) {     メソッド本体 } 構文を構成する5つの要素 アクセス修

  2. PythonでROC曲線をプロットする方法をわかりやすく解説

    ROC曲線とは?ROC(Receiver Operating Characteristic:受信者動作特性)曲線は、分類モデルの性能を視覚的に評価するためのグラフです。横軸に偽陽性率(FPR)、縦軸に真陽性率(TPR)を取り、モデルの識別能力を直感的に確認できます。scikit-learnでは metrics.plot_roc_curve(clf, X_test, y_test) メソッドを使うことで、学習済みモデルから簡単にROC曲線を描画できます。ROC曲線をプロットする手順分類用データセットの生成make_classification() メソッドを使用して、ランダムなnクラス分類問題の