2012-02-04 4 views
1

Можно создать дубликат:
Why does defining getitem on a class make it iterable in python?Почему создание класса iterable производит этот вывод?

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 
..... 

Итерация над экземпляром класса б, испускающий целые числа. Почему это?

(наткнулся на приведенной выше программу, если смотреть на Why does defining __getitem__ on a class make it iterable in python?)

+1

Почему вы опубликовали точный дубликат вопроса, с которым вы связались, и на него уже отлично ответили? –

+0

@Rob В этом посте у меня возникли проблемы с выяснением того, почему целые числа выводятся – harish

+0

Оглядываясь назад, я должен был взглянуть на семантику __getitem__ перед публикацией этого вопроса – harish

ответ

3

Поскольку для контура реализуются для объектов, которые определяют __getitem__, но не __iter__ пропускания последовательных индексов к __getitem__ методе объекта. См. the effbot. (Что на самом деле происходит под одеялом IIUC немного сложнее: если объект не обеспечивает __iter__, то iter вызывается на объекте, а итератор, который iter возвращается делает призвание основной объекта __getitem__.)

Смежные вопросы