Mark Dickinson <dicki...@gmail.com> added the comment:

Hmm.  This doesn't look like something that's easy to fix without affecting 
existing correct code;  given 
that the behaviour has been around for a while (I'm not sure exactly how long), 
and that the issue is gone 
in 3.x, I suspect it may not be worth trying.

Analysis:  for classic classes, the ceval loop calls PySequence_GetSlice, which 
corrects the negative 
indices by adding the length of the sequence  (as described in the docs) and 
then calls the 
tp_as_sequence->sq_slice slot on the type.  That ends up calling instance_slice 
(in 
Objects/classobject.c), which discovers that the class doesn't implement 
__getslice__ and so passes the 
adjusted slice on to the __getitem__ method.

I'm not sure how this could be changed to get the correct behaviour:  
PySequence_GetSlice would somehow 
need to know that it was going to end up calling __getitem__ rather than 
__getslice__.

Raymond, any thoughts?

----------
nosy: +mark.dickinson, rhettinger

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue7532>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to