を期待するようrtruedivが動作しない、私が作成します。のPython:私のpythonのV3を使用して
class NewInt(int):
def __rtruediv__(self, num):
print('in here')
x = NewInt(5)
343/x # called rtruediv as I expect, but
343.3/x # does not call rtruediv
わからない理由ので、これは次のとおりです、これは矛盾しているようだ私に
x/343
x/343.3 #both will call truediv
..
誰かがこれがなぜ..であるのかについての説明を持っています。また、Pythonが343.3/xの場合、オーバーライドできるメソッドがありますか?
オーバーロードに関する情報を確認したときにこの現象が検出され、この不一致が発生しました。
デイブ
ああ。これと下図の両方が素晴らしい答えです。私は、Pythonがオペレータの右側のオブジェクトをどのように扱うかについての実際の詳細は知らなかった。それは私が期待していたものではありません。そして今、私はそれがこのようにする必要があることを見ることができます。実際には、343.3/xは、floatオブジェクトのtruedivメソッドを使用しているため、NewIntの新しいメソッドを使用する操作をオーバーライドする方法はありません。オーバーライディングのオペレータは、最初に考えるよりも複雑になります。いくつかのテキストは、この「詳細」を外すようです。 – Dave
これは間違いです。'NewInt'が' int'を継承しないように変更されていれば(または、浮動小数点数による分割方法を知っている他のクラスでも)可能です。この場合、左手側の試行は失敗するが、右手側が今度は打ち上げられる。そして、 '__rtruediv__'を正しく実装したと仮定すると、右のオペランドの除算メソッドの結果はエラーなしで返されます。 – wim