On Tue, Dec 29, 2020 at 4:24 PM Greg Ewing <greg.ew...@canterbury.ac.nz>
wrote:

> The library reference doesn't seem to use the terms "sequence protocol"
> and "mapping protocol". It talks about "sequence types" and "mapping
> types", but doesn't use the word "protocol" in relation to them.
>

The only one I've really seen used fairly universally is the "iterator
protocol" -- though in the docs, it's under "Iterator Types":
https://docs.python.org/3/library/stdtypes.html?highlight=iterable#iterator-types

But then, under that: "The iterator objects themselves are required to
support the following two methods, which together form the iterator
protocol:"

So that's (I think) the only place it documented and called a protocol.


> Nor is there any clear list of methods that a type needs to provide
> in order to be considered a sequence or mapping.


Isn't that what the ABCs are?

The trick here, in this context, is that something doesn't need to be a
fully functioning Mapping to be unpacked.

But there are a handful of places where a subset of the Mapping API is
needed (apparently .keys() and __getitem__, with a particular
relationship). So It is good to (a) be consistent about that -- which I
think is the case today, and (b) document it -- which is not the case.

Given that where the iteration protocol is described is under built in
types, it makes sense to me to t put it there -- maybe call it the "mapping
unpacking protocol" (better ideas welcome!).


> There are lists of
> operations supported by the built-in container types, but those are
> fairly extensive, and it's not obvious which ones are vital.
>

there's more than that -- there's the ABCs. But anyway, the problem with
"vital" is the core of duck typing -- what's vital depends on the context
-- We can only (and should only) define that for a few places where they
are used in core Python -- is there anything else other than Mapping
unpacking that we should identify and document?


> So are the "sequence protocol" and "mapping protocol" really mythical
> beasts that don't really exist? Are they more akin to the infamous
> "file-like object" which is whatever it needs to be for the purpose
> at hand?
>

See above -- I don't think there's a Sequence protocol at all. And the
"mapping protocol" that at least I"ve been talking about is in a particular
context -- unpacking, or somewhat more generally, when you want to be able
to access all the items in a Mapping, but not do anything else with it.

Guido has since said that the ABCs are intended to be definitive,
> but the docs don't really make that clear either. (And the ABC doc page
> talks about "APIs", not "protocols"!)
>

I think the ABCs Are definitive -- but what are they definitive of? They
are certainly not minimal protocols.

-CHB

-- 
Christopher Barker, PhD

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/KWA2FJJAEIJDNJU7MIEW3W43YQ3N7Z7P/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to