[pypy-dev] wrong precedence of __radd__ vs list __iadd__

Armin Rigo arigo at tunes.org
Sun Mar 13 12:05:42 CET 2011


Checked in 72ce40f4803c.

Greg, about the second example you reported:

class C(object):
     def __rmul__(self, other):
         other *= 2
         return other
     def __index__(self):
         return 3
print [1] * C()   # -> CPython: [1,1]  PyPy: [1,1,1]

This is obscure.  It works that way because in that particular case,
CPython first tries __mul__/__rmul__ and then tries the internal
sq_repeat slot of the list (which calls C.__index__()).  I think there
is just no way to reproduce this behavior while remaining sane :-/


More information about the Pypy-dev mailing list