On 05/01/2010 12:08 AM, Patrick Maupin wrote:
+=, -=, /=, *=, etc.  conceptually (and, if lhs object supports in-
place operator methods, actually) *modify* the lhs object.

Your proposed .= syntax conceptually *replaces* the lhs object
(actually, rebinds the lhs symbol to the new object).

The += family of operators really do rebind the symbol, not modify the object.

  >>> from decimal import Decimal
  >>> d = Decimal(42)
  >>> e = Decimal(18)
  >>> orig = d
  >>> d += e
  >>> d
  Decimal("60")
  >>> e
  Decimal("18")
  >>> orig
  Decimal("42")
  >>> d is orig
  False

If your suggestion that += *modifies* the object, then orig would now unintuitively contain 60 and "d is orig" would return True.

This doesn't preclude you from implementing a self-mutating += style __add__ method and returning "self", but it's usually a bad idea unless it's dire for performance (and even then, think it over a couple times).

-tkc



--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to