[Python-Dev] PEP for adding an sq_index slot so that any object, a or b, can be used in X[a:b] notation
Bengt Richter
bokr at oz.net
Thu Feb 9 22:26:34 CET 2006
On Thu, 09 Feb 2006 01:00:22 -0700, Travis Oliphant <oliphant.travis at ieee.org> wrote:
>
>Abstract
>
> This PEP proposes adding an sq_index slot in PySequenceMethods and
> an __index__ special method so that arbitrary objects can be used
> in slice syntax.
>
>Rationale
>
> Currently integers and long integers play a special role in slice
> notation in that they are the only objects allowed in slice
> syntax. In other words, if X is an object implementing the sequence
> protocol, then X[obj1:obj2] is only valid if obj1 and obj2 are both
> integers or long integers. There is no way for obj1 and obj2 to
> tell Python that they could be reasonably used as indexes into a
> sequence. This is an unnecessary limitation.
>
> In NumPy, for example, there are 8 different integer scalars
> corresponding to unsigned and signed integers of 8, 16, 32, and 64
> bits. These type-objects could reasonably be used as indexes into
> a sequence if there were some way for their typeobjects to tell
> Python what integer value to use.
>
>Proposal
>
> Add a sq_index slot to PySequenceMethods, and a corresponding
> __index__ special method. Objects could define a function to
> place in the sq_index slot that returns an C-integer for use in
> PySequence_GetSlice, PySequence_SetSlice, and PySequence_DelSlice.
>
How about if SLICE byte code interpretation would try to call
obj.__int__() if passed a non-(int,long) obj ? Would that cover your use case?
BTW the slice type happily accepts anything for start:stop:step I believe,
and something[slice(whatever)] will call something.__getitem__ with the slice
instance, though this is neither a fast nor nicely spelled way to customize.
Regards,
Bengt Richter
More information about the Python-Dev
mailing list