2017-07-26 11 views
1

私は私がPythonでOOPを働いている今、マーク・ルッツブック第5版からのpythonを学んでいます。オペレータオーバーロードの概念があります。さて、オペレータのオーバーロードはどのようになっていますか。算術演算子など、本当に私にナットを駆動していることは、彼は家族を演算子オーバーロードに属する方法の一つとして、それを言って、クラスを演算子オーバーロードの代表としてpythonで基本的にコンストラクタある__init__方法に言及されているが、メソッド。それは実際にこのようなものか、自分のラインを考慮した私の認識が間違っていて、ちょうどそれがオペレータオーバーロードメソッドであるかどうかです!? 「演算子のオーバーロード」のHere is the reference to the topic.のPython演算子のオーバーロードと__init__メソッド

+0

新しいクラスの '__init__'を定義するときには、コンストラクタをオーバーロードしています。オペレータの定義が与えられれば、コンストラクタは演算子として見ることができます。 – Evert

+0

'__init__'は' __call__'のコンポーネントで、 '()'演算子です。 –

答えて

0

私の理解では、あなたがクラスを作るとき、あなたは標準のものが動作する方法を定義することができ効果的です。たとえば、加算演算子(+)が代わりにそれらの合計を求めるアイテムを連結するために使用されるクラスを作成することができ(すなわち5+5==55代わり5+5==10の)。これと同じように あなたが__init__を定義するとき、あなたは再定義している、またはその特定のクラスのための独自のを作るために標準「コンストラクタを」「のオーバーロード」。

1

は、私は、彼らがしているように、それは二重下線特別な方法だから__init__は、オペレータの方法と一緒に記載されていると思います。しかし、多くの特殊メソッドは演算子とは関係がないので、それらをすべて「演算子オーバーロードメソッド」と呼ぶことは非常に誤解を招くことです。

このトピックについてはを読むことをお勧めします。__foo__タイプのメソッドは単に「特殊メソッド」と呼ばれています。そのうちのいくつかは、実際のオペレータに関連しているが、他の多くは(__len____iter____format____hash__など)(など__str____bool____int__、)タイプの間の変換や、いくつかの組み込み関数の実装に関連しています。他は通常、記述子プロトコルを実装する__get__,__set____delete__のメソッドのように、間接的にしか実行されません。私は、演算子を実装するメソッドではなく、間接的に実行するメソッドで__init____new__をグループ化します。

関連する問題