[Python-Dev] Is explicit registration of Iterators needed?

Ivan Levkivskyi levkivskyi at gmail.com
Fri Oct 7 18:52:50 EDT 2016


On 7 October 2016 at 17:08, Guido van Rossum <guido at python.org> wrote:

> On Fri, Oct 7, 2016 at 7:47 AM, Serhiy Storchaka <storchaka at gmail.com>
> wrote:
> > On 07.10.16 17:37, Guido van Rossum wrote:
> >>
> >> On Fri, Oct 7, 2016 at 6:36 AM, Serhiy Storchaka <storchaka at gmail.com>
> >> wrote:
> >>>
> >>> A number of builtin iterator classes (but not all builtin iterator
> >>> classes)
> >>> are registered with the Iterator ABC in Lib/_collections_abc.py.  But
> >>> isinstance(it, Iterable) check works without explicit registration,
> >>> because
> >>> Iterable has __subclasshook__ that checks iterator methods.  Is there a
> >>> need
> >>> in explicit registrations?  Or their can be safely removed?
> >>
> >>
> >> The preferred apprach is actually inheritance; registration comes
> >> next; the __subclasshook__ is a final compromise to the tradition of
> >> duck typing. I think the registrations should stay.
>

I have a question about the registration of builtins. Currently, typing.py
contains this line:

    ByteString.register(type(memoryview(b'')))

But there are two test lines in test_collections.py

    self.assertNotIsInstance(memoryview(b""), ByteString)
    self.assertFalse(issubclass(memoryview, ByteString))

This looks like a contradiction. Which one is right?
Should these tests be removed or the registration in typing.py?

--
Ivan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20161008/b87a2fac/attachment.html>


More information about the Python-Dev mailing list