1

可能重复:
为什么在类上定义getitem使其在 python 中可迭代?

class b:
    def __getitem__(self, k):
        return k

cb = b()

for k in cb:
    print k

我得到输出:

0
1
2
3
4
5
6
7
8
.....

迭代 b 类的实例,发出整数。这是为什么?

(在查看为什么在类上定义 __getitem__ 使其在 python 中可迭代时遇到上述程序? )

4

1 回答 1

3

因为for循环是为定义__getitem__但不是__iter__通过将连续索引传递给对象__getitem__方法的对象实现的。见effbot。(IIUC 背后真正发生的事情要复杂一些:如果对象不提供__iter__,则iter在对象上调用 then ,返回的迭代器iter调用底层对象的__getitem__。)

于 2012-02-04T22:44:51.127 回答