On Sun, Aug 21, 2016 at 2:53 AM Michael Selik <michael.se...@gmail.com> wrote:
> On Sun, Aug 21, 2016 at 2:46 AM eryk sun <eryk...@gmail.com> wrote: > >> On Sun, Aug 21, 2016 at 6:34 AM, Michael Selik <michael.se...@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 >> > > For that to make sense, Iterable should be a parent of C, or C should be a > subclass of something registered as an Iterable. Otherwise it'd be creating > a general recommendation to say ``__iter__ = None`` on every non-Iterable > class, which would be silly. > I see your point for avoiding iterability when having __getitem__, but I hope that's seen as an anti-pattern that reduces flexibility. And I should learn to stop hitting the send button halfway through my email.
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/