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
ですか? 私はそれを行うための素敵なpythonicの方法を探しています。