Message96532
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? |
|
Date |
User |
Action |
Args |
2009-12-17 20:36:52 | mark.dickinson | set | recipients:
+ mark.dickinson, rhettinger, flox |
2009-12-17 20:36:52 | mark.dickinson | set | messageid: <1261082212.04.0.19696566525.issue7532@psf.upfronthosting.co.za> |
2009-12-17 20:36:50 | mark.dickinson | link | issue7532 messages |
2009-12-17 20:36:49 | mark.dickinson | create | |
|