質問: 多くのプログラミング言語では、オブジェクトに対する演算子の振る舞いを再定義できます。 例えばpythonでは、オブジェクトに`__eq__()`等の特殊メソッドで定義できます。 これは一般的にはオーバーロードと呼ばれますが、なぜオーバーライドではなくオーバーロードと呼ぶのでしょうか......? オーバーロードは同オブジェクトに複数の同名メソッドを定義することだと思いますが、演算子の再定義の場合、感覚的には、javaで言うtoString()のオーバーライドのようなイメージを持っているので、「オーバーライド」がしっくりくる気がします。
回答: > > オーバーロードは同オブジェクトに複数の同名メソッドを定義すること > > > おっしゃるとおりだと思いますが、(それ以前からあったかも知れませんが)もともとはC++等で、`String` + `int`や`String` + `自作クラス`など、言語が演算子を定義していない型同士の演算に演算子を適用するために作られたものだと認識しています。 つまり、あるオブジェクトに、引数の型に応じた演算子を複数定義するための機能だったので、オーバーロードなのだとおもいます。 Pythonの場合は変数は型を持たないので、引数の型に応じた演算子を追加ではなく、既存の演算子の上書きに見えてしまうので違和感を感じておられるのだと思いますが、先に有名になってしまった型に応じた演算子の追加としてのオペレーターオーバーロードが有名になっているので、演算子の定義(追加も上書きも)広くオペレーターオーバーロードと呼ばれているのだと思います。