Static Typing with Python¶
Tutorials¶
Guides¶
Reference¶
See also
The documentation at https://mypy.readthedocs.io/ is relatively accessible and complete.
Specification¶
- Specification for the Python type system
- The Python Type System
- Meta-topics
- Type system concepts
- Type annotations
- Type forms
- Special types in annotations
- Generics
- Type qualifiers
- Class type assignability
- Type aliases
- Literals
- Protocols
- Callables
- Constructors
Overloads- Exceptions
- Dataclasses
- Typed dictionaries
- Tuples
- Named Tuples
- Enumerations
- Type narrowing
- Type checker directives
- Distributing type information
- Historical and deprecated features
- Glossary
Typing PEPs¶
Significant changes to the Python Type System Specification are proposed and discussed in Python Enhancement Proposals (PEPs). See https://peps.python.org/topic/typing for a list of all current and historical typing-related PEPs.
Indices and tables¶
Discussions and Support¶
Typing-related Tools¶
Type Checkers¶
The extent to which these adhere to the specification is monitored by a conformance test suite (results).
Development Environments¶
PyCharm, an IDE that supports type stubs both for type checking and code completion.
Visual Studio Code, a code editor that supports type checking using mypy, pyright, or the Pylance extension.
Linters and Formatters¶
black, a code formatter with support for type stub files.
flake8-pyi, a plugin for the flake8 linter that adds support for type stubs.
ruff, a linter built for speed, with support for most of the
flake8-pyirules.
Type-Hint and Stub Integration¶
autotyping, a tool which infers simple types from their context and inserts them as inline type-hints.
merge-pyi, a thin wrapper around
ApplyTypeAnnotationsVisitorfrom libCST that integrates .pyi signatures as inline type-hints in Python source code.
