Static Typing with Python

Tutorials

Guides

Reference

See also

The documentation at https://mypy.readthedocs.io/ is relatively accessible and complete.

Specification

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-pyi rules.

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 ApplyTypeAnnotationsVisitor from libCST that integrates .pyi signatures as inline type-hints in Python source code.