<div dir="ltr"><div dir="ltr">Your proposed syntax is hard to implement, because it would require invasive syntax changes to the language itself. That's probably not worth it.<div><br></div><div>However, there are other ways to achieve what you're looking for that don't require changing the language itself. This issue has some proposals: <a href="https://github.com/python/mypy/issues/1641">https://github.com/python/mypy/issues/1641</a>.</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El mar., 19 mar. 2019 a las 14:25, Tim Mitchell (<<a href="mailto:tim.mitchell.chch@gmail.com">tim.mitchell.chch@gmail.com</a>>) escribió:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">
<div dir="ltr">I would like to propose an enhancement to function annotations.  Here is the motivating use case:<br>When
 using callbacks I would like to declare the signature once as a type 
alias and use it to type hint both the function accepting the callback 
and the callbacks themselves.<br><br>Currently I can declare the function signare <br><br>CallbackType = Callable[[int, str], Any]<br><br>and use it for the function/method accepting the callback<br><br>def my_func(callabck: CallbackType):<br>   pass<br>   <br>however it does not work for the callback itself, I have to repeat myself<br><br>def my_callback(a: int, b: str) -> None:<br>    pass<br>    <br>and
 if I change the signature in CallbackType the typechecker has to know 
that my_callback will be passed to my_func in order to detect the error.<br><br>I propose to add a new syntax that declares the type of the function after the function name.<br><br>def my_callback: CallbackType(a, b):<br>    pass<br>    <br>any further parameter annotations would be disallowed:<br><br>def my_callback: CallbackType(a: int, b: str):   # Syntax error - duplicate annotations<br>    pass<br>    <br><br>If the function parameters do not match the type signare, type hinters would flag this as a type mismatch.<br><br>def my_callback: CallbackType(a):  # type mismatch<br>    pass<br>    <br><br>My original thought was that if CallbackType was not a Callable this would also be a type error.<br>However I have since realized this could be used for declaring the return type of properties:<br>For example<br><br>class MyClass(object):<br>    @property<br>    def my_prop: int(self)<br>        return 10<br>    <br>c = MyClass()<br>Then c.my_prop would be type hinted as an integer.<br><br>What do people think?<br></div><div>Cheers</div><div>Tim</div>

</div>
_______________________________________________<br>
Python-ideas mailing list<br>
<a href="mailto:Python-ideas@python.org" target="_blank">Python-ideas@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-ideas" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-ideas</a><br>
Code of Conduct: <a href="http://python.org/psf/codeofconduct/" rel="noreferrer" target="_blank">http://python.org/psf/codeofconduct/</a><br>
</blockquote></div>