[Python-checkins] cpython (merge 3.5 -> default): Issue #27905: Docs for typing.Type[C], by Michael Lee. (Merge 3.5->3.6)

guido.van.rossum python-checkins at python.org
Wed Sep 7 00:13:42 EDT 2016


https://hg.python.org/cpython/rev/1705cde6266d
changeset:   103210:1705cde6266d
parent:      103208:e588a0198b24
parent:      103209:9fb30d6af6a9
user:        Guido van Rossum <guido at dropbox.com>
date:        Tue Sep 06 21:13:15 2016 -0700
summary:
  Issue #27905: Docs for typing.Type[C], by Michael Lee. (Merge 3.5->3.6)

files:
  Doc/library/typing.rst |  39 ++++++++++++++++++++++++++++++
  1 files changed, 39 insertions(+), 0 deletions(-)


diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst
--- a/Doc/library/typing.rst
+++ b/Doc/library/typing.rst
@@ -502,6 +502,45 @@
           except KeyError:
               return default
 
+.. class:: Type
+
+   A variable annotated with ``C`` may accept a value of type ``C``. In
+   contrast, a variable annotated with ``Type[C]`` may accept values that are
+   classes themselves -- specifically, it will accept the *class object* of
+   ``C``. For example::
+
+      a = 3         # Has type 'int'
+      b = int       # Has type 'Type[int]'
+      c = type(a)   # Also has type 'Type[int]'
+
+   Note that ``Type[C]`` is covariant::
+
+      class User: ...
+      class BasicUser(User): ...
+      class ProUser(User): ...
+      class TeamUser(User): ...
+
+      # Accepts User, BasicUser, ProUser, TeamUser, ...
+      def make_new_user(user_class: Type[User]) -> User:
+          # ...
+          return user_class()
+
+   The fact that ``Type[C]`` is covariant implies that all subclasses of
+   ``C`` should implement the same constructor signature and class method
+   signatures as ``C``. The type checker should flag violations of this,
+   but should also allow constructor calls in subclasses that match the
+   constructor calls in the indicated base class. How the type checker is
+   required to handle this particular case may change in future revisions of
+   PEP 484.
+
+   The only legal parameters for ``Type`` are classes, unions of classes, and
+   ``Any``. For example::
+
+      def new_non_team_user(user_class: Type[Union[BaseUser, ProUser]]): ...
+
+   ``Type[Any]`` is equivalent to ``Type`` which in turn is equivalent
+   to ``type``, which is the root of Python's metaclass hierarchy.
+
 .. class:: Iterable(Generic[T_co])
 
     A generic version of :class:`collections.abc.Iterable`.

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list