October 2017
Intermediate to advanced
832 pages
13h 34m
Japanese
演算子のオーバーロード(overload)については、背反した気持ちを抱いています。演算子のオーバーロードをできないようにしたのは、多くの人がC++で乱用しているのを見てきたからという、かなり個人的な理由によるものです。
——James GoslingJavaの設計者Herb Sutter:「The C Family of Languages: Interview with Dennis Ritchie, Bjarne Stroustrup, and James Gosling」より[13-01]
演算子をオーバーロードすれば、「+」や「|」のような中置演算子、あるいは「-」や「~」などの単項演算子をユーザ定義のオブジェクトから操作できます。関数呼び出しの()、属性アクセスの「.」、要素アクセスおよびスライスの[]もPythonでは演算子なのですが、ここでは単項演算子と中置演算子を説明します。
1.2.1節で、必要最小限の機能しかないVectorクラスで演算子を素朴に実装しました。例1-2では、特殊メソッドを使った演算子のオーバーロード方法を示すために__add__と__mul__メソッドを書きましたが、これらの実装には見落としやすい微妙な問題が含まれています。例9-2ではまた、Vector2d.__eq__メソッドがVector(3, 4) == [3, 4]をTrueとみなすといいましたが、この結果が意味をなすこともあれば、なさないこともあります。本章ではこうした問題に取り組みます。
本章では、次のことを説明します。
Read now
Unlock full access