[issue36455] collections.abc.Sequence doesn't support reflection/introspection

James Edwards report at bugs.python.org
Wed Mar 27 22:40:42 EDT 2019


New submission from James Edwards <jheiv at jheiv.com>:

Consider:

    from collections.abc import *

    class DefinitelyNotAList:
        def __init__(self, backer):
            self.backer = backer

        def __getitem__(self, key):
            return self.backer[key]

        def __len__(self):
            return len(self.backer)

        def __contains__(self, needle):
            return needle in self.backer

        def __reversed__(self):
            return reversed(self.backer)

        def __iter__(self):
            return list.__iter__(self.backer)

        def index(self, *args, **kwargs): return self.backer.index(*args, **kwargs)

        def count(self, *args, **kwargs): return self.backer.count(*args, **kwargs)


    dnal = DefinitelyNotAList([2,4,6,8])

    for abc in [Collection, Reversible, Sized, Iterable, Container, Sequence]:
        print(abc.__name__.ljust(12), isinstance(dnal, abc))


Which prints:

    Collection   True
    Reversible   True
    Sized        True
    Iterable     True
    Container    True
    Sequence     False

I'm not sure whether this is a bug, a docs bug, or just a misunderstanding but my expectation, is that, somehow, I could get isinstance(obj, Sequence) to return *without* explicitly registering it, just as True is returned for the other abcs.

----------
components: Library (Lib)
messages: 339003
nosy: jedwards
priority: normal
severity: normal
status: open
title: collections.abc.Sequence doesn't support reflection/introspection
versions: Python 3.7

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue36455>
_______________________________________


More information about the Python-bugs-list mailing list