可能是重复问题:
为什么在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__
的类将被视为具有已定义的迭代器?欢迎提供关于此可能引起的其他异常情况的任何信息。