Define method aliases in Python? Define method aliases in Python? python python

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)