On 2020-12-26 21:02, Steven D'Aprano wrote:
On Sat, Dec 26, 2020 at 06:52:46PM -0800, Brendan Barnwell wrote:
On 2020-12-26 18:44, Steven D'Aprano wrote:
>>>> >I think if we were designing mapping protocols now, that would be an
>>>> >excellent idea, but we aren't, we have decades of history from `dict`
>>>> >behind us. And protocols from dict use `keys()` and getitem. E.g.
>>>> >update.
>>>
>>>    What do you mean by "protocols from dict"?  What are these protocols?
>"And protocols from dict use `keys()` and getitem. E.g. update."

        If I understand you right, that's not a protocol, that's just the
behavior of the dict type specifically.  As far as I can tell, it's not
even documented behavior, so it doesn't constrain anything.

Yes it is documented:

     help(dict.update)

and it was intentionally the inspiration for the behaviour of dict
augmented assignment.

I see. It's rather disturbing that that isn't mentioned in the docs on python.org.

If you want to argue it's not a protocol, just an interface, okay, it's
an interface. That's a difference that makes no difference.

No, it does make a difference. What you're describing is the interface to a single existing type. A protocol is a framework that defines behavior for USER-DEFINED types to hook into, as the descriptor protocol lets you define __get__ or the iterator protocol lets you define __iter__. The fact that dict uses a method with a particular name to do this or that should not constrain the creation of future protocols that define behavior for methods to be defined in user-created classes.

That said. . . I'm starting to wonder why not just create a new dunder called __items__ and have dict alias that to .items(). Then the **-unpacking protocol could use that and everything would be fine, right?

--
Brendan Barnwell
"Do not follow where the path may lead. Go, instead, where there is no path, and leave a trail."
   --author unknown
_______________________________________________
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/5UA5OOOCQIGAUKVLPQQI3Y2U2HV5FYAZ/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to