[Python-ideas] discontinue iterable strings

eryk sun eryksun at gmail.com
Sun Aug 21 02:45:33 EDT 2016


On Sun, Aug 21, 2016 at 6:34 AM, Michael Selik <michael.selik at gmail.com> wrote:
> The detection of not hashable via __hash__ set to None was necessary, but
> not desirable. Better to have never defined the method/attribute in the
> first place. Since __iter__ isn't present on ``object``, we're free to use
> the better technique of not defining __iter__ rather than defining it as
> None, NotImplemented, etc. This is superior, because we don't want __iter__
> to show up in a dir(), help(), or other tools.

The point is to be able to define __getitem__ without falling back on
the sequence iterator.

I wasn't aware of the recent commit that allows anti-registration of
__iter__. This is perfect:

    >>> class C:
    ...     __iter__ = None
    ...     def __getitem__(self, index): return 42
    ...
   >>> iter(C())
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'C' object is not iterable
    >>> isinstance(C(), collections.abc.Iterable)
    False


More information about the Python-ideas mailing list