<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 5.50.4134.100" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT size=2><FONT face=Courier>Hi!</FONT></FONT></DIV>
<DIV><FONT size=2><FONT face=Courier></FONT></FONT> </DIV>
<DIV><FONT size=2><FONT face=Courier>If I am missing a point here, what could it 
be? Watch the hot spots (***)</FONT></FONT></DIV>
<DIV><FONT face=Courier size=2></FONT><FONT face=Courier size=2><FONT 
face=Arial></FONT> </DIV>
<DIV>
<DIV><FONT face=Courier>Frederic</FONT></DIV></FONT></DIV>
<DIV><FONT face=Courier size=2></FONT> </DIV>
<DIV><FONT face=Courier size=2></FONT> </DIV>
<DIV><FONT face=Courier 
size=2>#############################################################################</FONT></DIV>
<DIV><FONT size=2><FONT face=Courier></FONT> </DIV>
<DIV><FONT face=Courier></FONT> </DIV>
<DIV><FONT face=Courier>
<DIV><FONT face=Courier size=2># Python 2.4, Windows ME</FONT></DIV>
<DIV><FONT size=2><FONT face=Arial></FONT></FONT> </DIV>X = 0, Y = 1  
</FONT></DIV>
<DIV><FONT face=Courier></FONT> </DIV>
<DIV><FONT face=Courier>class Vertex (list):</FONT></DIV>
<DIV><FONT face=Courier>   def __init__ (self, *coordinates): self [:] 
= list (coordinates [0:2])</FONT></DIV>
<DIV><FONT face=Courier>   def __add__ (self, V):  return Vertex 
(self [X] + V [X], self [Y] + V [Y])</FONT></DIV>
<DIV><FONT face=Courier>   def __iadd__ (self, V): self [X] += V [X]; 
self [Y] += V [Y]</FONT></DIV>
<DIV><FONT face=Courier></FONT> </DIV>
<DIV><FONT face=Courier></FONT> </DIV>
<DIV><FONT face=Courier>>>> V1 = Vertex (1, 2)<BR>>>> V2 = 
Vertex (4, 6)</FONT></DIV>
<DIV><FONT face=Courier></FONT> </DIV>
<DIV><FONT face=Courier>>>> V1 + V2<BR>[5, 
8]            
# OK</FONT></DIV>
<DIV><FONT face=Courier></FONT> </DIV>
<DIV><FONT face=Courier>>>> V1 += 
V2      # ***</FONT></DIV>
<DIV><FONT 
face=Courier>V1                # 
***   <BR>                  
# *** died ?<BR>>>> print 
V1<BR>None              # 
*** V1 died !<BR>>>> V2<BR>[5, 
8]            # V2 is 
fine</FONT></DIV>
<DIV><FONT face=Courier></FONT> </DIV>
<DIV><FONT face=Courier>   # Adding three traces to follow the state 
of self</FONT></DIV>
<DIV><FONT face=Courier></FONT> </DIV>
<DIV><FONT face=Courier>   def __iadd__ (self, 
V):<BR>      print 'A', 
self<BR>      self [X] += V 
[X]<BR>      print 'B', 
self<BR>      self [Y] += V 
[Y]<BR>      print 'C', self</FONT></DIV>
<DIV><FONT face=Courier></FONT> </DIV>
<DIV><FONT face=Courier>>>> V1 += V2<BR>A [1, 2]<BR>B [5, 2]<BR>C [5, 
8]          # *** self is still OK 
when method 
terminates.<BR>            
      # *** Also shows that operator += 
did call 
__iadd__, <BR>             
     # *** (though the 2.4 doc no longer 
mentions it)</FONT></DIV>
<DIV><FONT face=Courier></FONT> </DIV>
<DIV><FONT face=Arial></FONT><FONT face=Arial></FONT><FONT 
face=Arial></FONT><FONT face=Arial></FONT><FONT face=Arial></FONT><FONT 
face=Arial></FONT><FONT face=Arial></FONT><FONT face=Arial></FONT><FONT 
face=Arial></FONT><FONT face=Arial></FONT><FONT face=Arial></FONT><FONT 
face=Arial></FONT><FONT face=Arial></FONT><FONT face=Arial></FONT><FONT 
face=Arial></FONT><FONT face=Arial></FONT><FONT face=Arial></FONT><FONT 
face=Arial></FONT><FONT face=Arial></FONT><FONT face=Arial></FONT><FONT 
face=Arial></FONT><FONT face=Arial></FONT><FONT face=Arial></FONT><FONT 
face=Arial></FONT><BR><FONT face=Courier># Explicit call works fine</FONT></DIV>
<DIV><FONT face=Courier></FONT> </DIV>
<DIV><FONT face=Courier>>>> V1.__iadd__ (V2)<BR>A [1, 2]<BR>B [5, 
2]<BR>C [5, 8]</FONT></DIV>
<DIV><FONT face=Courier></FONT> </DIV>
<DIV><FONT face=Courier>>>> V1 <BR>[5, 8]     
<<<< OK !!!</FONT></DIV>
<DIV><FONT face=Arial></FONT></FONT> </DIV></BODY></HTML>