When I subtract a float from an integer (e.g.
1-2.0), Python does implicit type conversion (I think). But when I call what I thought was the same operation using the magic method
__sub__, it suddenly does not anymore.
What am I missing here? When I overload operators for my own classes, is there a way around this other than explicitly casting input to whatever type I need?
a=1 a.__sub__(2.) # returns NotImplemented a.__rsub__(2.) # returns NotImplemented # yet, of course: a-2. # returns -1.0
a - b isn't just
a.__sub__(b). It also tries
a can't handle the operation, and in the
1 - 2. case, it's the float's
__rsub__ that handles the operation.
>>> (2.).__rsub__(1) -1.0
a.__rsub__(2.), but that's the wrong
__rsub__. You need the right-side operand's
__rsub__, not the left-side operand.
There is no implicit type conversion built into the subtraction operator.
float.__rsub__ has to handle ints manually. If you want type conversion in your own operator implementations, you'll have to handle that manually too.