The typing_inspect module defines experimental API for runtime
inspection of types defined in the Python standard typing module.
Works with typing version 3.7.4 and later. Example usage:
from typing import Generic, TypeVar, Iterable, Mapping, Union
from typing_inspect import is_generic_type
T = TypeVar('T')
class MyCollection(Generic[T]):
content: T
assert is_generic_type(Mapping)
assert is_generic_type(Iterable[int])
assert is_generic_type(MyCollection[T])
assert not is_generic_type(int)
assert not is_generic_type(Union[int, T])Note: The API is still experimental, if you have ideas/suggestions please
open an issue on tracker.
Currently typing_inspect only supports latest version of typing. This
limitation may be lifted if such requests will appear frequently.
Currently provided functions (see functions docstrings for examples of usage):
is_generic_type(tp): Test iftpis a generic type. This includesGenericitself, but excludes special typing constructs such asUnion,Tuple,Callable,ClassVar.is_callable_type(tp): Testtpis a generic callable type, including subclasses excluding non-generic types and callables.is_tuple_type(tp): Test iftpis a generic tuple type, including subclasses excluding non-generic classes.is_union_type(tp): Test iftpis a union type.is_optional_type(tp): Test iftpis an optional type (eithertype(None)or a direct union to it such as inOptional[int]). Nesting andTypeVars are not unfolded/inspected in this process.is_literal_type(tp): Test iftpis a literal type.is_final_type(tp): Test iftpis a final type.is_typevar(tp): Test iftprepresents a type variable.is_new_type(tp): Test iftprepresents a distinct type.is_classvar(tp): Test iftprepresents a class variable.get_origin(tp): Get the unsubscripted version oftp. Supports generic types,Union,Callable, andTuple. ReturnsNonefor unsupported types.get_last_origin(tp): Get the last base of (multiply) subscripted typetp. Supports generic types,Union,Callable, andTuple. ReturnsNonefor unsupported types.get_parameters(tp): Return type parameters of a parameterizable typetpas a tuple in lexicographic order. Parameterizable types are generic types, unions, tuple types and callable types.get_args(tp, evaluate=False): Get type arguments oftpwith all substitutions performed. For unions, basic simplifications used byUnionconstructor are performed. IfevaluateisFalse(default), report result as nested tuple, this matches the internal representation of types. IfevaluateisTrue, then all type parameters are applied (this could be time and memory expensive).get_last_args(tp): Get last arguments of (multiply) subscripted typetp. Parameters forCallableare flattened.get_generic_type(obj): Get the generic type ofobjif possible, or its runtime class otherwise.get_generic_bases(tp): Get generic base types oftpor empty tuple if not possible.typed_dict_keys(td): GetTypedDictkeys and their types, or None iftdis not a typed dict.