Define method aliases in Python?
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__
Simply list it as an attribute:
__rmul__ = __mul__
This is the same way you'd create an alias of a function in a module; creating an alias of a method within a class body works the same.
The point is that in Python, you can tell objects how to multiply themselves by things. That means that
a * b
could either mean "tell a
to multiply itself by b
" or "tell b
to multiply itself by a
". In code, that translates to
a.__mul__(b)
or
b.__rmul__(a)