<[EMAIL PROTECTED]> wrote: > I do not think I am understanding how to redefine the getitem function > for string. Why does the following not work: > > class NStr(str): > def __getitem__(self,idx): > print "NStr:getitem",idx,type(idx) > return str.__getitem__(self,idx) > > s=NStr("abcde") > > print s[1] > print s[1:4:2] > print s[1:2] > > if I run this program (python 2.5; Mac OSX) i get: > > $ python strProb.py > NStr:getitem 1 <type 'int'> > b > NStr:getitem slice(1, 4, 2) <type 'slice'> > bd > b > > ie the last statement (s[1:2]) with a simple slice does not call the > new __getitem__???? What am I missing.
For backwards compatibility, slicing without a step on some ancient built-in types (including strings, but also lists) goes to __getslice__ (an otherwise obsolete method) instead of __getitem__. Simply, override __getslice__ by properly delegating from it to __getitem__. Alex -- http://mail.python.org/mailman/listinfo/python-list