— Type Hints* Implementada a partir de Python 3.5 * ainda provisional em 19/jul/2019: "interface may change" 3 def parse_flag(text: str) -> bool: return text.upper() in {'Y', 'YES', 'T', 'TRUE'}
na execução Ex. Lisp, Smalltalk, Python, JavaScript, Ruby, Clojure, Elixir, etc. Tipagem estática: declaração de tipos no código-fonte, verificação na compilação Ex. C, C++, Pascal, Java, C#, Haskell, Rust, Kotlin, Swift, etc. Tipagem gradual: declaração de tipos opcional, verificação na compilação, normalmente sem efeito na execução Ex. Dart, TypeScript, etc. 4
A partir de Python 3.8 * ainda draft em 19/jul/2019 5 from __future__ import annotations def loads(input: Union[str, bytes], *, encoding: Optional[str] = None) -> dict[str, Any]: ...
partir dos exemplos em Smalltalk e Ruby do capítulo 6 de An Introduction to Object-Oriented Programming 3 ed, de Tim Budd. https://github.com/ramalho/pyob/ 14
Function Annotations 3.0 2014 484 Type Hints 3.5P 483 The Theory of Type Hints N/A 2015 482 Literature Overview for Type Hints N/A 2016 526 Syntax for Variable Annotations 3.6 2017 544 Protocols: Structural subtyping (static duck typing) 3.8 557 Data Classes 3.7 560 Core support for typing module and generic types 3.7 561 Distributing and Packaging Type Information 3.7 563 Postponed Evaluation of Annotations 3.7 2018 586 Literal Types 3.8 2019 585 Type Hinting Usability Conventions 3.8D 589 TypedDict: Type Hints for Dicts with a Fixed Set of Keys 3.8 591 Adding a final qualifier to typing 3.8 3.8
covariância, contravariância, tipagem estrutural, etc. Tempo para escrever anotações de tipo Às vezes é complicado exprimir o que precisamos Melhor suportado nas versões mais recentes de Python Python 3.8: avanços importantes de usabilidade e expressividade Aumento do tempo de inicialização do programa Relevante só para pequenos scripts, não para processos de longa duração 30
ou a comunidade de desenvolvedoras é grande. O sistema é grande, complexo, e vai precisar evoluir muito. Bernat Gabor* dá uma boa regra: se você investe em testes, deve investir em type hints * referência no final 31