[Tutor] Defining operators for custom types

bob gailer bgailer at gmail.com
Sat Feb 13 01:11:13 CET 2010


Mark Young wrote:
> I created a custom vector type, inheriting from object, and defined 
> __mul__, __add__, etc. Unfortunately, the operators only work if I 
> type "vector * (int/float/number)", in that exact order. My program 
> produces an error if I instead type "number * vector".

Use __rmul__, __radd__, etc.

> This makes sense to me, because I haven't told the number (int, float, 
> whatever) how to deal with an object of type vector, (At least, I 
> think that's why it doesn't work.). Is there any way to allow 
> "number (operator) vector", short of modifying the standard types' 
> behavior?
>  
> Here's an example of the error.
> vec1 = vector(5,6,7)
> >>> vec1 * 2
> (10, 12, 14)
> >>> 2 * vec1
> Traceback (most recent call last):
>   File "<pyshell#9>", line 1, in <module>
>     2 * vec1
> TypeError: unsupported operand type(s) for *: 'int' and 'vector'
>  
> I'm using python 3.1.
> Thanks.
> ------------------------------------------------------------------------
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>   


-- 
Bob Gailer
919-636-4239
Chapel Hill NC



More information about the Tutor mailing list