Get the Code on GitHub! Mypy on Twitter is @mypyproject Follow @mypyproject on Twitter Why mypy? Compile-time type checking Static typing makes it easier to find bugs with less debugging. Easier maintenance Type declarations act as machine-checked documentation. Static typing makes your code easier to understand and easier to modify without introducing bugs. Grow your programs from dynamic to static typing You can develop programs with dynamic typing and add static typing after your code has matured, or migrate existing Python code to static typing.

mypy

Mypy is an optional static type checker for Python that aims to combine the benefits of dynamic (or "duck") typing and static typing. Mypy combines the expressive power and convenience of Python with a powerful type system and compile-time type checking. Mypy type checks standard Python programs; run them using any Python VM with basically no runtime overhead.

What's new

Mypy 0.780 released

3 June 2020: Mypy 0.780 was released. Read the blog post for the details. -Ivan Levkivskyi

Mypy 0.770 released

10 March 2020: Mypy 0.770 was released. This release includes various fixes and improvements and improved type inference in some cases. Read the blog post for the details. -Michael J. Sullivan

Mypy 0.760 released

17 December 2019: Mypy 0.760 was released. This release includes various fixes and improvements, and a type signature suggestion feature for tools. Read the blog post for the details. -Jukka Lehtosalo

Mypy 0.750 released

29 November 2019: Mypy 0.750 was released. This release has better support for self-types, improved stub generator, experimental static inference of annotations, and other improvements and bug fixes. Read the blog post for more details. -Ivan Levkivskyi

Older news

Seamless dynamic and static typing

From Python... def fib(n) : a, b = 0, 1 while a < n: yield a a, b = b, a+b

...to statically typed Python def fib(n: int ) -> Iterator [ int ] : a, b = 0, 1 while a < n: yield a a, b = b, a+b

Migrate existing code to static typing, a function at a time. You can freely mix static and dynamic typing within a program, within a module or within an expression. No need to give up dynamic typing — use static typing when it makes sense. Often just adding function signatures gives you statically typed code. Mypy can infer the types of other variables.

Python syntax

Mypy type checks programs that have type annotations conforming to PEP 484. Getting started is easy if you know Python. The aim is to support almost all Python language constructs in mypy.

Powerful type system

Mypy has a powerful, modern type system with features such as bidirectional type inference, generics, callable types, abstract base classes, multiple inheritance and tuple types.

Access to Python libs

Many commonly used libraries have stubs (statically typed interface definitions) that allow mypy to check that your code uses the libraries correctly.