Commutative object in emulating numbers

Chris Rebert clp2 at rebertia.com
Mon Sep 14 07:16:24 CEST 2009


On Sun, Sep 13, 2009 at 9:52 PM, iu2 <israelu at elbit.co.il> wrote:
> Hi,
>
> I reached the chapter "Emulating numeric types" in the python
> documentation and I tried this:
>
>>>> class A:
>        def __mul__(self, a):
>                return 'A' * a
>
> Now, this works as expected:
>>>> a = A()
>>>> a * 3
> 'AAA'
>
> But this doesn't (also as expected):
>>>> 3 * a
>
> Traceback (most recent call last):
>  File "<pyshell#45>", line 1, in <module>
>    3 * a
> TypeError: unsupported operand type(s) for *: 'int' and 'instance'
>>>>
>
> What do I need to do in order to make the two classes, int and A,
> commutative?

You need to define __rmul__():
http://docs.python.org/dev/3.0/reference/datamodel.html#object.__rmul__

Cheers,
Chris
--
http://blog.rebertia.com



More information about the Python-list mailing list