Как цикл for в Python перебирает объект без подписки?

Как цикл for в Python может перебирать объекты, к которым я не могу обратиться с помощью нотации [n]?

Учти это:

myCollection # Some objects with elements (not a simple list)
for elem in myCollection:
    print elem.Title
myCollection[0]

Приведенный выше код в моем случае будет успешным в цикле for и напечатает строку заголовка всех элементов, в то время как вызов myCollection[0] завершится ошибкой со следующим исключением:

TypeError: 'myCollection' object is unsubscriptable

Как оператор for перебирает объекты?

Есть ли другой способ получить доступ к первому элементу коллекции, когда нотация нижнего индекса не работает?

Задний план

Это происходит в сценариях IronPython в приложении Spotfire, поэтому я не могу дать MWE.

Вот каталог (myCollection):

['Equals', 'GetHashCode', 'GetType', 'Item', 'MemberwiseClone', 'Overloads',   'ReferenceEquals', 'ToString', '__call__', '__class__', '__cmp__', '__delattr__', '__delete__', '__doc__', '__get__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__str__']

чтобы проиллюстрировать методы, определенные для этого объекта. У него нет метода next или next, и здесь по-прежнему работают циклы for.


person HansHarhoff    schedule 15.01.2016    source источник
comment
Есть ли другой способ получить доступ к первому элементу коллекции, когда запись нижнего индекса не работает? – Попробуйте next(iter(myCollection))   -  person thefourtheye    schedule 15.01.2016
comment
Это не работает, так как жалуется, что следующий не определен   -  person HansHarhoff    schedule 15.01.2016
comment
Однако он работает, чтобы написать: iterator = iter(myCollection) с последующим iterator.next()   -  person HansHarhoff    schedule 15.01.2016


Ответы (1)


Цикл for работает, вызывая метод private__next__(), который возвращает значение.

person Oisin    schedule 15.01.2016
comment
Это не кажется правильным (по крайней мере, не в моем примере с использованием IronPython). В myCollection нет метода next. Я отредактировал свой вопрос, чтобы отразить это - person HansHarhoff; 15.01.2016
comment
Вот почему вы получаете эту ошибку. - person Oisin; 06.04.2016
comment
Нет, поскольку цикл for работает, а следующего метода нет, цикл for не может использовать следующий метод. Ошибки возникают только при доступе типа myCollection[0]. - person HansHarhoff; 06.04.2016