Fernando Perez wrote:
I was wondering if someone can help me understand why __getslice__ has been
deprecated, yet it remains necessary to implement it for simple slices (i:j),
while __getitem__ gets called for extended slices (i:j:k).

I don't think this is true -- everything goes to __getitem__:

>>> class C(object):
...     def __getitem__(self, *args, **kwds):
...         print args, kwds
...
>>> c = C()
>>> c[1]
(1,) {}
>>> c[1:2]
(slice(1, 2, None),) {}
>>> c[1:2:-1]
(slice(1, 2, -1),) {}

All you have to do is check the type of the single argument to __getitem__:

>>> class C(object):
...     def __getitem__(self, x):
...         if isinstance(x, slice):
...             return x.indices(10)
...         else:
...             return x
...
>>> c = C()
>>> c[1]
1
>>> c[1:2]
(1, 2, 1)
>>> c[1:2:-1]
(1, 2, -1)

Steve
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to