On Thu, 09 Feb 2006 01:00:22 -0700, Travis Oliphant <[EMAIL PROTECTED]> 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 _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com