I wrote a class to represent vectors in Python (as an exercise) and I'm having problems with extending the built-in operators.
I defined a __mul__ method for the vector class. The problem is that in the expression x * y the interpreter calls the __mul__ method of x, not y.
So vector(1, 2, 3) * 2 returns a vector <2, 4, 6> just like it should; but 2 * vector(1, 2, 3) creates a TypeError because the built-in int class does not support multiplication by my user-defined vectors.
I could solve this problem by simply writing a new multiplication function
def multiply(a, b): try: return a * b except TypeError: return b * a but this would require redefining every function that I want to use with my user-defined classes.
Is there a way to make the built-in function handle this correctly?