Я использую Python 3.3. Я хочу получить объект slice
и использовать его для создания нового объекта range
.
Это выглядит примерно так:
>>> class A:
def __getitem__(self, item):
if isinstance(item, slice):
return list(range(item.start, item.stop, item.step))
>>> a = A()
>>> a[1:5:2] # works fine
[1, 3]
>>> a[1:5] # won't work :(
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
a[1:5] # won't work :(
File "<pyshell#9>", line 4, in __getitem__
return list(range(item.start, item.stop, item.step))
TypeError: 'NoneType' object cannot be interpreted as an integer
Что ж, проблема здесь очевидна - range
не принимает значение None
в качестве значения:
>>> range(1, 5, None)
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
range(1, 5, None)
TypeError: 'NoneType' object cannot be interpreted as an integer
Но то, что не очевидно (для меня), является решением. Как я буду называть range
чтобы он работал в каждом случае? Я ищу хороший питонический способ сделать это.