A bunch of the conversation here is how to handle both positional and
keyword arguments with a single signature. Let me suggest an alternative.
At compile time, we know if the call is made with keyword arguments or not.

a[1]         positional only
a[b=1]       keyword only
a[1, b=1]    both
a[**kwargs]  keyword only

I suggest that in the first case it calls
        __getitem__(self, args)
as it does now and in the other cases it calls
        __getitemx__(self, args, **kwargs)
instead (the signature is what matters here, don't bikeshed the name). Some
people have proposed arbitrary signatures for __getitemx__ but I think
that's an unnecessary degree of complexity for little benefit. Personally,
I'm not even sure I'd ever want to mix args and kwargs but including that
in the signature preserves that possibility for others that find it useful.

To explain further: when I use [...] without positional arguments the code
works exactly as it does today with all args in a tuple. Therefore, for
consistency when I add a keyword argument that should not change the args
value which is why both signatures include a single args parameter.

If you write a form that uses a keyword argument, and __getitemx__ does not
exist then it would raise an error other than KeyError (either TypeError or
AttributeError, with the latter requiring no special handling).

--- Bruce
_______________________________________________
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/KNPAZ23WDNRBOXOICDCECH26L4H6DJXY/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to