summaryrefslogtreecommitdiffstats
path: root/Lib/typing.py
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2023-11-17 18:28:35 (GMT)
committerGitHub <noreply@github.com>2023-11-17 18:28:35 (GMT)
commit0ea645445d749635cc6d369e9c42d6e176fc21dd (patch)
treef8bf9da5a50993393b6041db0d1972fa1b93c7e3 /Lib/typing.py
parent976488ebf654c837e63aa7d3077878c2c50c0c44 (diff)
downloadcpython-0ea645445d749635cc6d369e9c42d6e176fc21dd.zip
cpython-0ea645445d749635cc6d369e9c42d6e176fc21dd.tar.gz
cpython-0ea645445d749635cc6d369e9c42d6e176fc21dd.tar.bz2
[3.12] gh-112194: Convert more examples to doctests in `typing.py` (GH-112195) (#112208)
gh-112194: Convert more examples to doctests in `typing.py` (GH-112195) (cherry picked from commit 949b2cc6eae6ef4f3312dfd4e2650a138446fe77) Co-authored-by: Nikita Sobolev <mail@sobolevn.me> Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Diffstat (limited to 'Lib/typing.py')
-rw-r--r--Lib/typing.py74
1 files changed, 43 insertions, 31 deletions
diff --git a/Lib/typing.py b/Lib/typing.py
index 9c8f48e..1624300 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -218,8 +218,12 @@ def _should_unflatten_callable_args(typ, args):
For example::
- assert collections.abc.Callable[[int, int], str].__args__ == (int, int, str)
- assert collections.abc.Callable[ParamSpec, str].__args__ == (ParamSpec, str)
+ >>> import collections.abc
+ >>> P = ParamSpec('P')
+ >>> collections.abc.Callable[[int, int], str].__args__ == (int, int, str)
+ True
+ >>> collections.abc.Callable[P, str].__args__ == (P, str)
+ True
As a result, if we need to reconstruct the Callable from its __args__,
we need to unflatten it.
@@ -261,7 +265,10 @@ def _collect_parameters(args):
For example::
- assert _collect_parameters((T, Callable[P, T])) == (T, P)
+ >>> P = ParamSpec('P')
+ >>> T = TypeVar('T')
+ >>> _collect_parameters((T, Callable[P, T]))
+ (~T, ~P)
"""
parameters = []
for t in args:
@@ -2268,14 +2275,15 @@ def get_origin(tp):
Examples::
- assert get_origin(Literal[42]) is Literal
- assert get_origin(int) is None
- assert get_origin(ClassVar[int]) is ClassVar
- assert get_origin(Generic) is Generic
- assert get_origin(Generic[T]) is Generic
- assert get_origin(Union[T, int]) is Union
- assert get_origin(List[Tuple[T, T]][int]) is list
- assert get_origin(P.args) is P
+ >>> P = ParamSpec('P')
+ >>> assert get_origin(Literal[42]) is Literal
+ >>> assert get_origin(int) is None
+ >>> assert get_origin(ClassVar[int]) is ClassVar
+ >>> assert get_origin(Generic) is Generic
+ >>> assert get_origin(Generic[T]) is Generic
+ >>> assert get_origin(Union[T, int]) is Union
+ >>> assert get_origin(List[Tuple[T, T]][int]) is list
+ >>> assert get_origin(P.args) is P
"""
if isinstance(tp, _AnnotatedAlias):
return Annotated
@@ -2296,11 +2304,12 @@ def get_args(tp):
Examples::
- assert get_args(Dict[str, int]) == (str, int)
- assert get_args(int) == ()
- assert get_args(Union[int, Union[T, int], str][int]) == (int, str)
- assert get_args(Union[int, Tuple[T, int]][str]) == (int, Tuple[str, int])
- assert get_args(Callable[[], T][int]) == ([], int)
+ >>> T = TypeVar('T')
+ >>> assert get_args(Dict[str, int]) == (str, int)
+ >>> assert get_args(int) == ()
+ >>> assert get_args(Union[int, Union[T, int], str][int]) == (int, str)
+ >>> assert get_args(Union[int, Tuple[T, int]][str]) == (int, Tuple[str, int])
+ >>> assert get_args(Callable[[], T][int]) == ([], int)
"""
if isinstance(tp, _AnnotatedAlias):
return (tp.__origin__,) + tp.__metadata__
@@ -2319,12 +2328,15 @@ def is_typeddict(tp):
For example::
- class Film(TypedDict):
- title: str
- year: int
-
- is_typeddict(Film) # => True
- is_typeddict(Union[list, str]) # => False
+ >>> from typing import TypedDict
+ >>> class Film(TypedDict):
+ ... title: str
+ ... year: int
+ ...
+ >>> is_typeddict(Film)
+ True
+ >>> is_typeddict(dict)
+ False
"""
return isinstance(tp, _TypedDictMeta)
@@ -2881,15 +2893,15 @@ def TypedDict(typename, fields=None, /, *, total=True, **kwargs):
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')
+ >>> 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
+ >>> Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first')
+ True
The type info can be accessed via the Point2D.__annotations__ dict, and
the Point2D.__required_keys__ and Point2D.__optional_keys__ frozensets.