Published: 30 March 2021, 18:00
PEP-526, introducing syntax for variable annotations (laded in Python 3.6), allows annotating any valid assignment target:
c.x: int = 0
c.y: int
d = {}
d['a']: int = 0
d['b']: int
The last line is the most interesting one. Adding annotations to an expression suppresses its execution:
d = {}
# fails
d[1]
# KeyError: 1
# nothing happens
d[1]: 1
Despite being a part of the PEP, it’s not supported by mypy:
$ cat tmp.py
d = {}
d['a']: int
d['b']: str
reveal_type(d['a'])
reveal_type(d['b'])
$ mypy tmp.py
tmp.py:2: error: Unexpected type declaration
tmp.py:3: error: Unexpected type declaration
tmp.py:4: note: Revealed type is 'Any'
tmp.py:5: note: Revealed type is 'Any'