typing module

typing.ABCMeta(name, bases, namespace, **kwargs)

Metaclass for defining Abstract Base Classes (ABCs).

typing.Annotated(*args, **kwargs)

Add context specific metadata to a type.


Typed version of the return of open() in binary mode.

typing.ForwardRef(arg[, is_argument, ...])

Internal wrapper to hold a forward reference.


Abstract base class for generic types.


Represent a PEP 585 generic type


Generic base class for TextIO and BinaryIO.

typing.NamedTupleMeta(typename, bases, ns)


Base class for protocol classes.

typing.SupportsAbs(*args, **kwargs)

An ABC with one abstract method __abs__ that is covariant in its return type.

typing.SupportsBytes(*args, **kwargs)

An ABC with one abstract method __bytes__.

typing.SupportsComplex(*args, **kwargs)

An ABC with one abstract method __complex__.

typing.SupportsFloat(*args, **kwargs)

An ABC with one abstract method __float__.

typing.SupportsIndex(*args, **kwargs)

An ABC with one abstract method __index__.

typing.SupportsInt(*args, **kwargs)

An ABC with one abstract method __int__.

typing.SupportsRound(*args, **kwargs)

An ABC with one abstract method __round__ that is covariant in its return type.


Typed version of the return of open() in text mode.

typing.TypeVar(name, *constraints[, bound, ...])

Type variable.


alias of io


alias of re

The typing module: Support for gradual typing as defined by PEP 484.

At large scale, the structure of the module is following: * Imports and exports, all public names should be explicitly added to __all__. * Internal helper functions: these should never be used in code outside this module. * _SpecialForm and its instances (special forms): Any, NoReturn, ClassVar, Union, Optional * Two classes whose instances can be type arguments in addition to types: ForwardRef and TypeVar * The core of internal generics API: _GenericAlias and _VariadicGenericAlias, the latter is

currently only used by Tuple and Callable. All subscripted types like X[int], Union[int, str], etc., are instances of either of these classes.

  • The public counterpart of the generics API consists of two classes: Generic and Protocol.

  • Public helper functions: get_type_hints, overload, cast, no_type_check, no_type_check_decorator.

  • Generic aliases for collections.abc ABCs and few additional protocols.

  • Special types: NewType, NamedTuple, TypedDict.

  • Wrapper submodules for re and io related types.

class Annotated(*args, **kwargs)[source]

Bases: object

Add context specific metadata to a type.

Example: Annotated[int, runtime_check.Unsigned] indicates to the hypothetical runtime_check module that this type is an unsigned int. Every other consumer of this type can ignore this metadata and treat this type as int.

The first argument to Annotated must be a valid type.


  • It’s an error to call Annotated with less than two arguments.

  • Nested Annotated are flattened:

    Annotated[Annotated[T, Ann1, Ann2], Ann3] == Annotated[T, Ann1, Ann2, Ann3]
  • Instantiating an annotated type is equivalent to instantiating the

underlying type:

Annotated[C, Ann1](5) == C(5)
  • Annotated can be used as a generic type alias:

    Optimized = Annotated[T, runtime.Optimize()]
    Optimized[int] == Annotated[int, runtime.Optimize()]
    OptimizedList = Annotated[List[T], runtime.Optimize()]
    OptimizedList[int] == Annotated[List[int], runtime.Optimize()]
class BinaryIO[source]

Bases: IO[bytes]

Typed version of the return of open() in binary mode.

abstract write(s: Union[bytes, bytearray]) int[source]

s (Union[bytes, bytearray]) –

Return type


class ForwardRef(arg, is_argument=True, module=None, *, is_class=False)[source]

Bases: _Final

Internal wrapper to hold a forward reference.

class Generic[source]

Bases: object

Abstract base class for generic types.

A generic type is typically declared by inheriting from this class parameterized with one or more type variables. For example, a generic mapping type might be defined as:

class Mapping(Generic[KT, VT]):
    def __getitem__(self, key: KT) -> VT:
    # Etc.

This class can then be used as follows:

def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT:
        return mapping[key]
    except KeyError:
        return default
class IO[source]

Bases: Generic

Generic base class for TextIO and BinaryIO.

This is an abstract, generic version of the return of open().

NOTE: This does not distinguish between the different possible classes (text vs. binary, read vs. write vs. read/write, append-only, unbuffered). The TextIO and BinaryIO subclasses below capture the distinctions between text vs. binary, which is pervasive in the interface; however we currently do not offer a way to track the other distinctions in the type system.

abstract close() None[source]
Return type


abstract fileno() int[source]
Return type


abstract flush() None[source]
Return type


abstract isatty() bool[source]
Return type


abstract read(n: int = -1) AnyStr[source]

n (int) –

Return type


abstract readable() bool[source]
Return type


abstract readline(limit: int = -1) AnyStr[source]

limit (int) –

Return type


abstract readlines(hint: int = -1) List[source]

hint (int) –

Return type


abstract seek(offset: int, whence: int = 0) int[source]
  • offset (int) –

  • whence (int) –

Return type


abstract seekable() bool[source]
Return type


abstract tell() int[source]
Return type


abstract truncate(size: Optional[int] = None) int[source]

size (Optional[int]) –

Return type


abstract writable() bool[source]
Return type


abstract write(s: AnyStr) int[source]

s (AnyStr) –

Return type


abstract writelines(lines: List) None[source]

lines (List) –

Return type


abstract property closed: bool
abstract property mode: str
abstract property name: str
class Protocol[source]

Bases: Generic

Base class for protocol classes.

Protocol classes are defined as:

class Proto(Protocol):
    def meth(self) -> int:

Such classes are primarily used with static type checkers that recognize structural subtyping (static duck-typing), for example:

class C:
    def meth(self) -> int:
        return 0

def func(x: Proto) -> int:
    return x.meth()

func(C())  # Passes static type check

See PEP 544 for details. Protocol classes decorated with @typing.runtime_checkable act as simple-minded runtime protocols that check only the presence of given attributes, ignoring their type signatures. Protocol classes can be generic, they are defined as:

class GenProto(Protocol[T]):
    def meth(self) -> T:
class SupportsAbs(*args, **kwargs)[source]

Bases: Protocol

An ABC with one abstract method __abs__ that is covariant in its return type.

class SupportsBytes(*args, **kwargs)[source]

Bases: Protocol

An ABC with one abstract method __bytes__.

class SupportsComplex(*args, **kwargs)[source]

Bases: Protocol

An ABC with one abstract method __complex__.

class SupportsFloat(*args, **kwargs)[source]

Bases: Protocol

An ABC with one abstract method __float__.

class SupportsIndex(*args, **kwargs)[source]

Bases: Protocol

An ABC with one abstract method __index__.

class SupportsInt(*args, **kwargs)[source]

Bases: Protocol

An ABC with one abstract method __int__.

class SupportsRound(*args, **kwargs)[source]

Bases: Protocol

An ABC with one abstract method __round__ that is covariant in its return type.


alias of str

class TextIO[source]

Bases: IO[str]

Typed version of the return of open() in text mode.

abstract property buffer: BinaryIO
abstract property encoding: str
abstract property errors: Optional[str]
abstract property line_buffering: bool
abstract property newlines: Any
class TypeVar(name, *constraints, bound=None, covariant=False, contravariant=False)[source]

Bases: _Final, _Immutable

Type variable.


T = TypeVar('T')  # Can be anything
A = TypeVar('A', str, bytes)  # Must be str or bytes

Type variables exist primarily for the benefit of static type checkers. They serve as the parameters for generic types as well as for generic function definitions. See class Generic for more information on generic types. Generic functions work as follows:

def repeat(x: T, n: int) -> List[T]:

‘’’Return a list containing n references to x.’’’ return [x]*n

def longest(x: A, y: A) -> A:

‘’’Return the longest of two strings.’’’ return x if len(x) >= len(y) else y

The latter example’s signature is essentially the overloading of (str, str) -> str and (bytes, bytes) -> bytes. Also note that if the arguments are instances of some subclass of str, the return type is still plain str.

At runtime, isinstance(x, T) and issubclass(C, T) will raise TypeError.

Type variables defined with covariant=True or contravariant=True can be used to declare covariant or contravariant generic types. See PEP 484 for more details. By default generic types are invariant in all type variables.

Type variables can be introspected. e.g.:

T.__name__ == ‘T’ T.__constraints__ == () T.__covariant__ == False T.__contravariant__ = False A.__constraints__ == (str, bytes)

Note that only type variables defined in global scope can be pickled.

NamedTuple(typename, fields=None, /, **kwargs)[source]

Typed version of namedtuple.

Usage in Python versions >= 3.6:

class Employee(NamedTuple):
    name: str
    id: int

This is equivalent to:

Employee = collections.namedtuple('Employee', ['name', 'id'])

The resulting class has an extra __annotations__ attribute, giving a dict that maps field names to types. (The field names are also in the _fields attribute, which is part of the namedtuple API.) Alternative equivalent keyword syntax is also accepted:

Employee = NamedTuple('Employee', name=str, id=int)

In Python versions <= 3.5 use:

Employee = NamedTuple('Employee', [('name', str), ('id', int)])
NewType(name, tp)[source]

NewType creates simple unique types with almost zero runtime overhead. NewType(name, tp) is considered a subtype of tp by static type checkers. At runtime, NewType(name, tp) returns a dummy function that simply returns its argument. Usage:

UserId = NewType('UserId', int)

def name_by_id(user_id: UserId) -> str:

UserId('user')          # Fails type check

name_by_id(42)          # Fails type check
name_by_id(UserId(42))  # OK

num = UserId(5) + 1     # type: int
TypedDict(typename, fields=None, /, *, total=True, **kwargs)[source]

A simple typed namespace. At runtime it is equivalent to a plain dict.

TypedDict creates a dictionary type that expects all of its instances to have a certain set of keys, where each key is associated with a value of a consistent type. This expectation is not checked at runtime but is only enforced by type checkers. Usage:

class Point2D(TypedDict):
    x: int
    y: int
    label: str

a: Point2D = {'x': 1, 'y': 2, 'label': 'good'}  # OK
b: Point2D = {'z': 3, 'label': 'bad'}           # Fails type check

assert Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first')

The type info can be accessed via the Point2D.__annotations__ dict, and the Point2D.__required_keys__ and Point2D.__optional_keys__ frozensets. TypedDict supports two additional equivalent forms:

Point2D = TypedDict('Point2D', x=int, y=int, label=str)
Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str})

By default, all keys must be present in a TypedDict. It is possible to override this by specifying totality. Usage:

class point2D(TypedDict, total=False):
    x: int
    y: int

This means that a point2D TypedDict can have any of the keys omitted.A type checker is only expected to support a literal False or True as the value of the total argument. True is the default, and makes all items defined in the class body be required.

The class syntax is only supported in Python 3.6+, while two other syntax forms work for Python 2.7 and 3.2+

cast(typ, val)[source]

Cast a value to a type.

This returns the value unchanged. To the type checker this signals that the return value has the designated type, but at runtime we intentionally don’t check anything (we want this to be as fast as possible).


A decorator to indicate final methods and final classes.

Use this decorator to indicate to type checkers that the decorated method cannot be overridden, and decorated class cannot be subclassed. For example:

class Base:

@final def done(self) -> None:

class Sub(Base):
def done(self) -> None: # Error reported by type checker

@final class Leaf:

class Other(Leaf): # Error reported by type checker

There is no runtime checking of these properties.


Get type arguments with all substitutions performed.

For unions, basic simplifications used by Union constructor are performed. Examples:

get_args(Dict[str, int]) == (str, int)
get_args(int) == ()
get_args(Union[int, Union[T, int], str][int]) == (int, str)
get_args(Union[int, Tuple[T, int]][str]) == (int, Tuple[str, int])
get_args(Callable[[], T][int]) == ([], int)

Get the unsubscripted version of a type.

This supports generic types, Callable, Tuple, Union, Literal, Final, ClassVar and Annotated. Return None for unsupported types. Examples:

get_origin(Literal[42]) is Literal
get_origin(int) is None
get_origin(ClassVar[int]) is ClassVar
get_origin(Generic) is Generic
get_origin(Generic[T]) is Generic
get_origin(Union[T, int]) is Union
get_origin(List[Tuple[T, T]][int]) == list
get_type_hints(obj, globalns=None, localns=None, include_extras=False)[source]

Return type hints for an object.

This is often the same as obj.__annotations__, but it handles forward references encoded as string literals, adds Optional[t] if a default value equal to None is set and recursively replaces all ‘Annotated[T, …]’ with ‘T’ (unless ‘include_extras=True’).

The argument may be a module, class, method, or function. The annotations are returned as a dictionary. For classes, annotations include also inherited members.

TypeError is raised if the argument is not of a type that can contain annotations, and an empty dictionary is returned if no annotations are present.

BEWARE – the behavior of globalns and localns is counterintuitive (unless you are familiar with how eval() and exec() work). The search order is locals first, then globals.

  • If no dict arguments are passed, an attempt is made to use the globals from obj (or the respective module’s globals for classes), and these are also used as the locals. If the object does not appear to have globals, an empty dictionary is used.

  • If one dict argument is passed, it is used for both globals and locals.

  • If two dict arguments are passed, they specify globals and locals, respectively.


Decorator to indicate that annotations are not type hints.

The argument must be a class or function; if it is a class, it applies recursively to all methods and classes defined in that class (but not to methods defined in its superclasses or subclasses).

This mutates the function(s) or class(es) in place.


Decorator to give another decorator the @no_type_check effect.

This wraps the decorator with something that wraps the decorated function in @no_type_check.


Decorator for overloaded functions/methods.

In a stub file, place two or more stub definitions for the same function in a row, each decorated with @overload. For example:

@overload def utf8(value: None) -> None: … @overload def utf8(value: bytes) -> bytes: … @overload def utf8(value: str) -> bytes: …

In a non-stub file (i.e. a regular .py file), do the same but follow it with an implementation. The implementation should not be decorated with @overload. For example:

@overload def utf8(value: None) -> None: … @overload def utf8(value: bytes) -> bytes: … @overload def utf8(value: str) -> bytes: … def utf8(value):

# implementation goes here


Mark a protocol class as a runtime protocol.

Such protocol can be used with isinstance() and issubclass(). Raise TypeError if applied to a non-protocol class. This allows a simple-minded structural check very similar to one trick ponies in collections.abc such as Iterable. For example:

class Closable(Protocol):
    def close(self): ...

assert isinstance(open('/some/file'), Closable)

Warning: this will check only the presence of the required methods, not their type signatures!