On 7 October 2016 at 17:08, Guido van Rossum <guido@python.org> wrote:
On Fri, Oct 7, 2016 at 7:47 AM, Serhiy Storchaka <storchaka@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@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