Pythonの「オーバーロード」は2つの意味を持つ——メソッドは無理でも演算子はOK
Overloaded Overloading

同僚のPeterが「Pythonがオーバーロードをサポートしないなら、+が加算にも連結にも使えるのはなぜ?」と尋ねました。答えは、Pythonはメソッドのオーバーロードをサポートしないが、演算子のオーバーロードはサポートするからです。__add__などのマジックメソッドを定義することで、+を独自クラスでも使えます。記事では、メソッドの多重定義ができない例と、演算子オーバーロードの仕組みを解説し、距離計算メソッドを多重定義したい場合の代替手法(ディスパッチメソッドや@singledispatch)も紹介します。
Pythonはメソッドのオーバーロードをサポートしませんが、演算子のオーバーロードはサポートします。そしてそれが、+を文字列と数値の両方に使える理由です。