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

Pythonの演算子オーバーロードとは?マジックメソッドの仕組みを解説

Pythonでは、組み込みクラスかユーザー定義クラスかにかかわらず、すべてのクラスはobjectクラスを継承しています。このobjectクラスには、名前の前後に二重アンダースコア(__)が付けられた多数の特殊な属性が定義されています。

これらの属性は、それぞれ同じ名前を持つメソッドをラップする構造になっており、このようなメソッドは「特殊メソッド(special methods)」または「マジックメソッド(magic methods)」と呼ばれます。

マジックメソッドと演算子の対応関係

クラス内でマジックメソッドをオーバーライドすることで、対応する演算子の挙動を自由にカスタマイズできます。主な対応関係は以下のとおりです。

  • __lt__()< 演算子(より小さい)
  • __gt__()> 演算子(より大きい)
  • __eq__()== 演算子(等しい)
  • __ne__()!= 演算子(等しくない)

実装例:Pointクラスで比較演算子を使えるようにする

実際に、自作クラスへ__lt__()を実装してみましょう。

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

    def __lt__(self, other):
        return self.x + self.y < other.x + other.y

p1 = Point(1, 2)
p2 = Point(3, 4)
print(p1 < p2)  # True

このように、マジックメソッドを定義しておけば、インスタンス同士を通常の演算子で直感的に比較できるようになります。演算子オーバーロードを活用すると、コードの可読性と表現力が大きく向上します。

  1. Pythonの名前空間(Namespace)とは?仕組みをわかりやすく解説

    名前空間はスコープを実現する仕組みPythonにおける名前空間(Namespace)とは、変数名とオブジェクトを対応付ける「辞書」のようなもので、スコープ(有効範囲)を実現するための基本的な仕組みです。Pythonでは、パッケージ・モジュール・クラス・関数・メソッドといったそれぞれの構成要素が、独自の名前空間を持っています。変数名の解決(どのオブジェクトを指すのかの判定)は、この名前空間の中で行われます。名前空間はいつ作られ、いつ消える?関数やモジュール、パッケージが評価され、実行が開始されるときに、そのための新しい名前空間が生成されます。これは「実行コンテキスト」と考えるとイメージしやすいで

  2. Pythonの例外はオブジェクト?例外オブジェクトの正体と構成要素をわかりやすく解説

    結論:「err」は例外オブジェクトです はい、提示されたコードにおける「err」は例外オブジェクトです。 Pythonではすべてがオブジェクト Pythonでは、すべてがオブジェクトとして扱われます。そして、すべてのオブジェクトには属性(アトリビュート)とメソッドが備わっています。そのため、リストや関数、タプルなどとまったく同じように、例外もまたオブジェクトなのです。つまり、例外にも他のオブジェクトと同様に属性が存在し、それらを設定したり参照したりすることができます。 例外のほとんどは、基底クラスであるExceptionクラスのサブクラスです。たとえば、変数eが例外オブジェクトである場合、e