可能重复:
Why does defining getitem on a class make it iterable in python?
我有一个类,它基本上是python列表的包装器。在这个课程中,我定义了__getitem__
,__setitem__
和__len__
。我没有为这个课程定义__iter__
。
当我离开时:
thing = ListWrapper(range(4))
for i in thing :
print i
我得到了输出:
0
1
2
3
哪个好,但是我期待某种错误消息说python找不到迭代器。我给了文档一个外观,找不到任何引用默认迭代器的东西。此外,跟踪PyDev中的代码表明它每次迭代都调用__getitem__
方法。
我想知道在我的代码中依赖这种行为是否是一种好习惯。在这一点上,这对我来说并不合适。 Python是否保证将具有__getitem__
和__len__
的类视为具有已定义的迭代器?关于这可能导致的任何其他古怪信息也是受欢迎的。
答案 0 :(得分:3)
如果一个类没有__iter__
,但确实有__getitem__
,那么迭代机制会用连续的整数调用它,直到它用完为止。