[Python-Dev] Comments on PEP 563 (Postponed Evaluation of Annotations) (original) (raw)
Mark Shannon mark at hotpy.org
Sun Nov 19 13:56:08 EST 2017
- Previous message (by thread): [Python-Dev] Show DeprecationWarning in debug mode?
- Next message (by thread): [Python-Dev] Comments on PEP 563 (Postponed Evaluation of Annotations)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi,
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 but List["int"] becomes 'List["int"]' # quoted retained
Also,
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"': ...
Cheers, Mark.
- Previous message (by thread): [Python-Dev] Show DeprecationWarning in debug mode?
- Next message (by thread): [Python-Dev] Comments on PEP 563 (Postponed Evaluation of Annotations)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]