<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman,new york,times,serif;font-size:12pt"><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;">Hi Raymond,<br><br>Thanks for the detailed explanation!<br><br>&gt; I'm not sure what your code was doing where the bugfix would cause<br>&gt; breakage.&nbsp; If its __getitem__() override returned a meaningful value<br>&gt; for each element in obj.keys(), then it should have worked fine.&nbsp; Of<br>&gt; course, if it was raising an exception or triggering a side-effect,<br>&gt; then one could argue that the bugfix was working as intended by<br>&gt; allowing&nbsp; the subclasser to affect how the base class goes about its<br>&gt; business.<br><br>It wasn't actually my own code, but that of a colleague. His<br>__getitem__() override is below. It fails because __getitem__() is<br>called with the wrong type of argument (plain int instead of
 a list of<br>atoms). I'm not sure it presents a convincing use case. I would have<br>used composition instead of inheritance in the same situation.<br><br>I don't feel competent to join the discussion about the changes in the<br>pickling behavior, but I feel quite strongly that such a change should<br>not be introduced in a bug-fix release.<br><br>Ralf<br><br><br>&nbsp; def __getitem__(self, atoms):<br>&nbsp;&nbsp;&nbsp; LIST = []<br>&nbsp;&nbsp;&nbsp; for atom in atoms:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; attr = 'index' <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if hasattr(atom, 'unique_index'):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; attr = 'unique_index'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LIST.append(getattr(atom, attr))<br>&nbsp;&nbsp;&nbsp; key1 = tuple(LIST)<br>&nbsp;&nbsp;&nbsp; LIST.reverse()&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; key2 = tuple(LIST)<br>&nbsp; <br>&nbsp;&nbsp;&nbsp; rc = None<br>&nbsp;&nbsp;&nbsp; try:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rc =
 dict.__getitem__(self, key1)<br>&nbsp;&nbsp;&nbsp; except KeyError, e:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pass<br>&nbsp;&nbsp;&nbsp; try:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rc = dict.__getitem__(self, key2)<br>&nbsp;&nbsp;&nbsp; except KeyError, e:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pass<br>&nbsp;&nbsp;&nbsp; return rc<br><br></div></div><br>

      <hr size=1>Ahhh...imagining that irresistible "new car" smell?<br> Check out
<a href="http://us.rd.yahoo.com/evt=48245/*http://autos.yahoo.com/new_cars.html;_ylc=X3oDMTE1YW1jcXJ2BF9TAzk3MTA3MDc2BHNlYwNtYWlsdGFncwRzbGsDbmV3LWNhcnM-">new cars at Yahoo! Autos.</a>
</body></html>