Я пытаюсь понять, почему я могу итерации вдоль строки. Что я вижу в документации:
Для объектов контейнера необходимо определить один метод поддержка итераций:
контейнер. __ ITER __()
Возвращает объект-итератор. Требуется объект для поддержки протокола итератора, описанного ниже. Если контейнер поддерживает различные типы итераций, дополнительные методы могут быть чтобы специально запросить итераторы для этих типов итераций. (Пример объекта, поддерживающего несколько форм итерации, быть древовидной структурой, которая поддерживает как ширину, так и глубину обход.) Этот метод соответствует слоту tp_iter типа структура для объектов Python в API Python/C.
Итераторы сами должны поддерживать следующие два метода, которые вместе образуют протокол итератора:
итератора. __ ITER __()
Вернуть сам объект итератора. Это требуется, чтобы оба контейнера и итераторы были использованы с для и в заявлениях. Этот метод соответствует слоту tp_iter структура типов для объектов Python в API Python/C.
итератора. следующая()
Возвращает следующий элемент из контейнера. Если есть нет дополнительных элементов, вызовите исключение StopIteration. Этот метод соответствует слову tp_iternext структуры типа для Python объектов в API Python/C.
Но...
>>> dir('aa')
['__add__', '__class__', '__contains__', '__delattr__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__',
'__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__',
'__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__',
'__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'_formatter_field_name_split', '_formatter_parser', 'capitalize',
'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs',
'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower',
'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip',
'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition',
'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip',
'swapcase', 'title', 'translate', 'upper', 'zfill']
Я не вижу здесь __ iter __() или next(). Так почему это работает?