On Jul 7, 2:00 pm, Steven D'Aprano <st...@remove-this- cybersource.com.au> wrote: > On Mon, 06 Jul 2009 22:18:20 -0700, Chris Rebert wrote: > >> Not so rare. Decimal uses unary plus. Don't assume +x is a no-op. > [...] > > Well, yes, but when would you apply it twice in a row? > > My point was that unary + isn't a no-op, and therefore neither is ++. For > Decimal, I can't think why you'd want to apply ++x, but for other > objects, who knows? > > Here's a toy example: > > >>> class Spam(str): > > ... def __pos__(self): > ... return self.__class__("spam " + self) > ...>>> s = Spam("") > >>> ++++s > > 'spam spam spam spam '
Here's another toy example: class Toy(int): def __init__(self, value): self._incrd = False int.__init__(self, value) def incrHalf(self): self._incrd = True def __pos__(self): if self._incrd: return self.__class__(self+1) else: p = self.__class__(self) p.incrHalf() return p def __add__(self, other): return self.__class__(int(self)+other) nows122[126]~% python -i toy.py >>> i=Toy(5) >>> +i 5 >>> ++i 6 >>> +++i 6 >>> +i++i 10 >>> +(+i++i) 10 >>> (++i)++i 11 -- http://mail.python.org/mailman/listinfo/python-list