【发布时间】:2011-10-30 00:24:21
【问题描述】:
可能重复:
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__ 的类将被视为具有已定义的迭代器?也欢迎任何其他关于这可能导致的怪异的信息。
【问题讨论】:
-
@Ned 谢谢,这就是我要找的东西,但找不到。啊,搜索词的挑剔本质。