のように計算する関数を書いていますeval
。に来るとfloat.__pos__
、なぜそのような役に立たない関数が存在するのか本当にわかりません。なぜなら:
>>> float.__pos__(-1.0)
-1.0
>>> float.__pos__(1.0)
1.0
whilefloat.__neg__
はまったく異なります:
>>> float.__neg__(1.0)
-1.0
では、の意味はfloat.__pos__
何ですか?
のように計算する関数を書いていますeval
。に来るとfloat.__pos__
、なぜそのような役に立たない関数が存在するのか本当にわかりません。なぜなら:
>>> float.__pos__(-1.0)
-1.0
>>> float.__pos__(1.0)
1.0
whilefloat.__neg__
はまったく異なります:
>>> float.__neg__(1.0)
-1.0
では、の意味はfloat.__pos__
何ですか?
>>> help(float.__pos__)
Help on wrapper_descriptor:
__pos__(...)
x.__pos__() <==> +x
これは、フロート+x
を使用するときに呼び出される「単項プラス」演算子です。x
あなたが発見したように、基本的にフロートに対しては何もしません;-)しかし、それで重要なことを行うサブクラスを定義することができます。それがそこにある理由です。
この__pos__
メソッドは、任意のオブジェクトに対する単項 + 演算子の効果を定義します。
Tim Peters が言及しているように、フロートには影響しません。
Python の + (pos) 単項演算子の目的は何ですか?を参照してください。何かをするために使用される例です。
おそらくよくご存じのとおり、Python には数値を否定する単項否定演算子があります。
>>> x = 5
>>> print(-x)
-5
>>> x = -5
>>> print(-x)
5
ただし、数字のリストを作成しているとしましょう。正のものの前に を付けると、より一貫性が保たれる可能性がある+
ため、Python にも単項演算+
子があります。
>>> numbers = [-3, -2, -1, 0, +1, +2, +3]
数値に対して単項演算子を使用する場合+
、それが何もしないことは間違いありません。一貫性のためだけに存在します。
Python で型の演算子をオーバーライドできることを考えると、もちろん__neg__
、その型のインスタンスを否定するには が必要です。Python__pos__
は、その型のインスタンスを否定しないようにすることで一貫性を保つことにしました。float
、これらの演算子をオーバーライドする他のすべての型と同様に、このプロトコルに従い、float
の実装__pos__
は単なる識別関数です。