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

Pythonの基本オーバーロードメソッドとは?仕組みと使い方を実例で解説

Pythonのクラスが持つオブジェクト指向の標準機能

Pythonのクラスは、オブジェクト指向プログラミング(OOP)パラダイムに必要な標準的な機能をすべて備えています。その中核となるのがクラス継承の仕組みで、Pythonでは複数の基底クラス(親クラス)から同時に継承できる「多重継承」がサポートされています。

さらに、派生クラス(子クラス)は基底クラスの任意のメソッドを自由に上書き(オーバーライド)できます。また、オーバーライドしたメソッドの中から、super()を使って同じ名前の基底クラスのメソッドを呼び出すことも可能です。

メソッドオーバーライドの基本例

以下は、基底クラスのメソッドを派生クラスで上書きするシンプルな例です。

class Animal:
    def speak(self):
        return "何か鳴きます"

class Dog(Animal):
    def speak(self):  # 基底クラスのメソッドをオーバーライド
        return "ワン!"

d = Dog()
print(d.speak())  # 出力: ワン!

このように、同じメソッド名でもクラスによって異なる動作を実現できるのがポリモーフィズム(多態性)の強みです。

オーバーロードメソッド(特殊メソッド/ダンダーメソッド)とは

Pythonにおける「オーバーロードメソッド」とは、主に特殊メソッド(マジックメソッド、ダンダーメソッド)を指します。これらは__init__のように前後にアンダースコア2つ(__)が付いた名前を持つメソッドで、演算子や組み込み関数の動作をクラスごとにカスタマイズできます。

代表的な特殊メソッド一覧

  • __init__: オブジェクト生成時の初期化処理(コンストラクタ)
  • __str__: print()などで表示される文字列を定義
  • __repr__: 開発者向けの公式な文字列表現を定義
  • __len__: 組み込み関数len()の挙動を定義
  • __add__ / __sub__ / __mul__: 演算子+ / - / *の挙動を定義
  • __eq__ / __lt__: 比較演算子== / <の挙動を定義
  • __getitem__: インデックスやキーによる要素アクセスを定義
  • __call__: インスタンスを関数のように呼び出せるようにする

演算子オーバーロードの実用例

次の例では、ベクトルを表すクラスに+演算子の動作を定義しています。

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

    def __str__(self):
        return f"Vector({self.x}, {self.y})"

v1 = Vector(2, 3)
v2 = Vector(4, 5)
print(v1 + v2)  # 出力: Vector(6, 8)

__add__を定義するだけで、自作クラス同士でも+演算子が自然に使えるようになります。これが演算子オーバーロードの基本的な考え方です。

super()で基底クラスのメソッドを活用する

オーバーライドした際も、基底クラスの処理を完全に捨てる必要はありません。super()を使えば、基底クラスの同名メソッドを呼び出して処理を再利用できます。

class Dog(Animal):
    def __init__(self, name):
        super().__init__()  # 基底クラスの初期化処理を呼び出し
        self.name = name

    def speak(self):
        original = super().speak()
        return f"{original} → ワン!"

まとめ

Pythonのクラスは、多重継承・メソッドオーバーライド・super()による基底クラス呼び出しなど、オブジェクト指向に必要な機能を標準で提供しています。さらに特殊メソッド(ダンダーメソッド)を定義することで、演算子や組み込み関数の挙動を柔軟にカスタマイズでき、直感的で読みやすいコードを書けるのが大きな魅力です。まずは__init____str__といった頻出の特殊メソッドから試してみるとよいでしょう。

  1. Python正規表現の文字クラス(文字セット)とは?基本の使い方を解説

    文字クラスとは「文字クラス」または「文字セット」とは、角括弧 [ ] で囲まれた文字の集合のことです。正規表現エンジンは、文字クラス内に含まれる複数の文字のうち、いずれか1文字にマッチします。マッチさせたい文字を角括弧の中に記述します。たとえば、母音のいずれかにマッチさせたい場合は、[aeiou] という文字セットを使用します。文字クラスがマッチするのは常に「1文字」だけである点に注意してください。また、文字クラス内の文字の並び順は結果に影響しません。[aeiou] と [uoiea] はまったく同じ意味になります。文字クラス内でハイフン(-)を使うと、文字の範囲を指定できます。たとえば [0

  2. Pythonの主なデータ型変換関数まとめ|int・float・str・listなどの使い方を実例付きで解説

    Pythonには、あるデータ型から別のデータ型へ値を変換するための組み込み関数が多数用意されています。この記事では、数値変換やコレクション変換に使える主要なデータ変換関数を、実際の実行例とともにわかりやすく解説します。 数値データの変換関数 int():整数への変換 浮動小数点数や、整数を表す文字列を整数(int)オブジェクトに変換します。文字列を変換する場合は、第2引数に基数を指定することで、8進数や16進数の文字列を整数に変換することもできます。 >>> int(11) 11 >>> int(11.15) 11 >>> int(2