Restore doc updates to typing.rst by Ivan Levkivskyi and Daniel Andra… · python/cpython@2a19d95
@@ -35,7 +35,7 @@ Callable
3535--------
36363737Frameworks expecting callback functions of specific signatures might be
38-type hinted using `Callable[[Arg1Type, Arg2Type], ReturnType]`.
38+type hinted using ``Callable[[Arg1Type, Arg2Type], ReturnType]``.
39394040For example::
4141@@ -68,7 +68,7 @@ subscription to denote expected types for container elements.
6868 overrides: Mapping[str, str]) -> None: ...
69697070Generics can be parametrized by using a new factory available in typing
71-called TypeVar.
71+called :class:`TypeVar`.
72727373.. code-block:: python
7474@@ -145,7 +145,7 @@ This is thus invalid::
145145 class Pair(Generic[T, T]): # INVALID
146146 ...
147147148-You can use multiple inheritance with `Generic`::
148+You can use multiple inheritance with :class:`Generic`::
149149150150 from typing import TypeVar, Generic, Sized
151151@@ -154,6 +154,17 @@ You can use multiple inheritance with `Generic`::
154154 class LinkedList(Sized, Generic[T]):
155155 ...
156156157+When inheriting from generic classes, some type variables could fixed::
158+159+ from typing import TypeVar, Mapping
160+161+ T = TypeVar('T')
162+163+ class MyDict(Mapping[str, T]):
164+ ...
165+166+In this case ``MyDict`` has a single parameter, ``T``.
167+157168Subclassing a generic class without specifying type parameters assumes
158169:class:`Any` for each position. In the following example, ``MyIterable`` is
159170not generic but implicitly inherits from ``Iterable[Any]``::
@@ -162,7 +173,11 @@ not generic but implicitly inherits from ``Iterable[Any]``::
162173163174 class MyIterable(Iterable): # Same as Iterable[Any]
164175165-Generic metaclasses are not supported.
176+The metaclass used by :class:`Generic` is a subclass of :class:`abc.ABCMeta`.
177+A generic class can be an ABC by including abstract methods or properties,
178+and generic classes can also have ABCs as base classes without a metaclass
179+conflict. Generic metaclasses are not supported.
180+166181167182The :class:`Any` type
168183---------------------
@@ -178,15 +193,6 @@ when a value has type :class:`Any`, the type checker will allow all operations
178193on it, and a value of type :class:`Any` can be assigned to a variable (or used
179194as a return value) of a more constrained type.
180195181-Default argument values
182------------------------
183-184-Use a literal ellipsis ``...`` to declare an argument as having a default value::
185-186- from typing import AnyStr
187-188- def foo(x: AnyStr, y: AnyStr = ...) -> AnyStr: ...
189-190196191197Classes, functions, and decorators
192198----------------------------------
@@ -236,7 +242,11 @@ The module defines the following classes, functions and decorators:
236242237243 Type variables may be marked covariant or contravariant by passing
238244 ``covariant=True`` or ``contravariant=True``. See :pep:`484` for more
239- details. By default type variables are invariant.
245+ details. By default type variables are invariant. Alternatively,
246+ a type variable may specify an upper bound using ``bound=<type>``.
247+ This means that an actual type substituted (explicitly or implictly)
248+ for the type variable must be a subclass of the boundary type,
249+ see :pep:`484`.
240250241251.. class:: Union
242252@@ -329,57 +339,139 @@ The module defines the following classes, functions and decorators:
329339330340.. class:: Iterable(Generic[T_co])
331341342+ A generic version of the :class:`collections.abc.Iterable`.
343+332344.. class:: Iterator(Iterable[T_co])
333345346+ A generic version of the :class:`collections.abc.Iterator`.
347+334348.. class:: SupportsInt
335349350+ An ABC with one abstract method `__int__`.
351+336352.. class:: SupportsFloat
337353354+ An ABC with one abstract method `__float__`.
355+338356.. class:: SupportsAbs
339357358+ An ABC with one abstract method `__abs__` that is covariant
359+ in its return type.
360+340361.. class:: SupportsRound
341362363+ An ABC with one abstract method `__round__`
364+ that is covariant in its return type.
365+342366.. class:: Reversible
343367368+ An ABC with one abstract method `__reversed__` returning
369+ an `Iterator[T_co]`.
370+344371.. class:: Container(Generic[T_co])
345372373+ A generic version of :class:`collections.abc.Container`.
374+346375.. class:: AbstractSet(Sized, Iterable[T_co], Container[T_co])
347376377+ A generic version of :class:`collections.abc.Set`.
378+348379.. class:: MutableSet(AbstractSet[T])
349380350-.. class:: Mapping(Sized, Iterable[KT_co], Container[KT_co], Generic[KT_co, VT_co])
381+ A generic version of :class:`collections.abc.MutableSet`.
382+383+.. class:: Mapping(Sized, Iterable[KT], Container[KT], Generic[VT_co])
384+385+ A generic version of :class:`collections.abc.Mapping`.
351386352387.. class:: MutableMapping(Mapping[KT, VT])
353388389+ A generic version of :class:`collections.abc.MutableMapping`.
390+354391.. class:: Sequence(Sized, Iterable[T_co], Container[T_co])
355392393+ A generic version of :class:`collections.abc.Sequence`.
394+356395.. class:: MutableSequence(Sequence[T])
357396397+ A generic version of :class:`collections.abc.MutableSequence`.
398+358399.. class:: ByteString(Sequence[int])
359400401+ A generic version of :class:`collections.abc.ByteString`.
402+403+ This type represents the types :class:`bytes`, :class:`bytearray`,
404+ and :class:`memoryview`.
405+406+ As a shorthand for this type, :class:`bytes` can be used to
407+ annotate arguments of any of the types mentioned above.
408+360409.. class:: List(list, MutableSequence[T])
361410362-.. class:: Set(set, MutableSet[T])
411+ Generic version of :class:`list`.
412+ Useful for annotating return types. To annotate arguments it is preferred
413+ to use abstract collection types such as :class:`Mapping`, :class:`Sequence`,
414+ or :class:`AbstractSet`.
415+416+ This type may be used as follows::
417+418+ T = TypeVar('T', int, float)
419+420+ def vec2(x: T, y: T) -> List[T]:
421+ return [x, y]
422+423+ def slice__to_4(vector: Sequence[T]) -> List[T]:
424+ return vector[0:4]
425+426+.. class:: AbstractSet(set, MutableSet[T])
427+428+ A generic version of :class:`collections.abc.Set`.
363429364430.. class:: MappingView(Sized, Iterable[T_co])
365431432+ A generic version of :class:`collections.abc.MappingView`.
433+366434.. class:: KeysView(MappingView[KT_co], AbstractSet[KT_co])
367435436+ A generic version of :class:`collections.abc.KeysView`.
437+368438.. class:: ItemsView(MappingView, Generic[KT_co, VT_co])
369439440+ A generic version of :class:`collections.abc.ItemsView`.
441+370442.. class:: ValuesView(MappingView[VT_co])
371443444+ A generic version of :class:`collections.abc.ValuesView`.
445+372446.. class:: Dict(dict, MutableMapping[KT, VT])
373447448+ A generic version of :class:`dict`.
449+ The usage of this type is as follows::
450+451+ def get_position_in_index(word_list: Dict[str, int], word: str) -> int:
452+ return word_list[word]
453+374454.. class:: Generator(Iterator[T_co], Generic[T_co, T_contra, V_co])
375455376456.. class:: io
377457378- Wrapper namespace for IO generic classes.
458+ Wrapper namespace for I/O stream types.
459+460+ This defines the generic type ``IO[AnyStr]`` and aliases ``TextIO``
461+ and ``BinaryIO`` for respectively ``IO[str]`` and ``IO[bytes]``.
462+ These representing the types of I/O streams such as returned by
463+:func:`open`.
379464380465.. class:: re
381466382- Wrapper namespace for re type classes.
467+ Wrapper namespace for regular expression matching types.
468+469+ This defines the type aliases ``Pattern`` and ``Match`` which
470+ correspond to the return types from :func:`re.compile` and
471+:func:`re.match`. These types (and the corresponding functions)
472+ are generic in ``AnyStr`` and can be made specific by writing
473+ ``Pattern[str]``, ``Pattern[bytes]``, ``Match[str]``, or
474+ ``Match[bytes]``.
383475384476.. function:: NamedTuple(typename, fields)
385477