method iter __iter__ python string iteration

method - ¿Por qué las cadenas de python no tienen la función__iter__?



python generator (2)

¿Cómo es posible que podamos iterar sobre las cadenas de python cuando las cadenas no tienen una función __iter__ ?

$ python Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> "asdf".__iter__ Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: ''str'' object has no attribute ''__iter__'' >>> it = iter("asdf") >>> it <iterator object at 0xb736f5ac> >>>

Y lo que es más importante (sin embargo, las cadenas están iteradas), ¿por qué las cadenas de pitón no siguen la misma convención que todo lo demás? Particularmente cuando los documentos de Python dicen que la función __iter__ es necesaria http://docs.python.org/library/functions.html#iter ?


Desde su enlace:

o debe ser compatible con el protocolo de secuencia (el método __getitem__() con argumentos enteros comenzando en 0).

In [1]: ''foo''.__getitem__(0) Out[1]: ''f''


Probablemente porque Python no es una lengua que tiene un tipo "char". Lo natural para regresar, si la cadena tuviera __iter__ serían caracteres, pero no hay caracteres. Puedo ver un caso para conectar __iter__ a una cadena y hacer lo que haga la lista (someString), sin estar realmente seguro de por qué no es así.