On Sun, Nov 29, 2020 at 1:49 AM Guido van Rossum <gu...@python.org> wrote:
> On Sat, Nov 28, 2020 at 9:32 AM Andrew Svetlov <andrew.svet...@gmail.com> > wrote: > >> I would see support of all argument kinds support in any proposal for a >> new callable: positional only args, named args, keyword-only, *args and >> **kwargs. >> The exact notation in probably less important than missing functionality. >> > > Hm, but using Protocol you can already express every callable type. We > could duplicate all of the complexity of 'def' parameter lists into the > type notation, but it would be very complex. So this requirement is at > least debatable (I'm not actually sure how I feel about it). > > Don't get me wrong please. I'm not the typing system developer (while use typing every day in my code). You can consider this email as end-user feedback. I have a lot of code that uses `Callable[]` annotation; it is a natural way of annotating any callable, isn't it. Sometimes `Callable` doesn't work. For example, I cannot annotate a function that accepts a keyword-only argument. Sure, I can use Protocol but it doesn't feel natural and requires more code lines, especially if the Protocol is used once or twice. Also, Protocol adds `self` to methods which looks at least confusing when I annotate plain callables which naturally don't belong to any class: class MyFunc(typing.Protocol): def __call__(self, /, arg: int) -> str: ... Moreover, I recall a pull request to only of my libraries that had something similar to: class MyProto(typing.Protocol): def __call__(self_, /, self: Class, arg: int) -> str: ... The protocol actually had two 'self': one fake self for protocol itself and another one if the *real* self. The PR was refactored to use a more *natural* style but my first reaction was eyeballs :) The last thing that is unclear for me is mixing protocols with ParamSpec from PEP-612. Sure, I can live with all the mentioned limitations and learn all the required tricks if we have a consensus that Callable should operate with positional unnamed arguments only; but allowing to write such things in a manner similar to that Python supports for function definitions already makes life easier. -- Thanks, Andrew Svetlov
_______________________________________________ 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/RIQKROVHV6QVXHOQZ5743GAC6ED7AOF5/ Code of Conduct: http://python.org/psf/codeofconduct/