[Python-Dev] Comments on PEP 563 (Postponed Evaluation of Annotations)

Mark Shannon mark at hotpy.org
Sun Nov 19 13:56:08 EST 2017


Overall I am strongly in favour of this PEP. It pretty much cures all 
the ongoing pain of using PEP 3017 annotations for type hints.

There is one thing I don't like however, and that is treating strings as 
if the quotes weren't there.
While this seems like a superficial simplification to make transition 
easier, it introduces inconsistency and will ultimately make both 
implementing and using type hints harder.

Having the treatment of strings depend on their depth in the AST seems 
confusing and unnecessary:
"List[int]" becomes 'List[int]' # quotes removed
List["int"] becomes 'List["int"]' # quoted retained


T = "My unparseable annotation"
def f()->T: pass

would remain legal, but

def f()->"My unparseable annotation"

would become illegal.

The change in behaviour between the above two code snippets is already 
confusing enough without making one of them a SyntaxError.

Using annotations for purposes other than type hinting is legal and has 
been for quite a while.
Also, PEP 484 type-hints are not the only type system in the Python 
ecosystem. Cython has a long history of using static type hints.

For tools other than MyPy, the inconsistent quoting is onerous and will 
require double-quoting to prevent a parse error.
For example

def foo()->"unsigned int": ...

will become illegal and require the cumbersome

def foo()->'"unsigned int"': ...


More information about the Python-Dev mailing list