Python提供“免费”的默认迭代器吗?

5

可能是重复问题:
为什么在Python中定义类的getitem会使其可迭代?

我有一个类,基本上是 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__的类将被视为具有已定义的迭代器?欢迎提供关于此可能引起的其他异常情况的任何信息。

@Ned 谢谢,这就是我在寻找的东西,但是找不到。啊,搜索词的挑剔本质。 - CodePartizan
1个回答

4
如果一个类没有 __iter__,但是有 __getitem__,那么迭代器会用连续的整数调用该函数直到它运行完。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接