I have a vector class and I defined the __mul__
method to multiply a vector by a number.
Here is the __mul__
method :
def __mul__(self, other):
x = self.x * other
y = self.y * other
new = Vector()
new.set_pos((x, y))
return new
My problem is that I don't know which is which between the number and the vector. If self is the number, self.x raises an error. (I'm maybe mistaking on this point : Is "other" always a number ?)
So I found here : Python: multiplication override that I could do :
__rmul__ = __mul__
but how can I do that in a class definition ?
Something like :
def __rmul__ = __mul__
self
will never be the number in __mul__()
because the object the method is attached to is not the number, it's the vector, and by definition it's the multiplicand.
other
will be a number if your object is being multiplied by a number. Or it could be something else, such as another vector, which you could test for and handle.
When your object is the multiplier, __rmul__()
is called if the multiplicand doesn't know how to handle the operation.
To handle the case in which __mul__
and __rmul__
should be the same method, because the operation is commutative, you can just do the assignment in your class definition.
class Vector(object):
def __mul__(self, other):
pass
__rmul__ = __mul__