]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Improve docs of PEP 604 Union (#24301)
authorKen Jin <28750310+Fidget-Spinner@users.noreply.github.com>
Tue, 9 Feb 2021 01:57:11 +0000 (09:57 +0800)
committerGitHub <noreply@github.com>
Tue, 9 Feb 2021 01:57:11 +0000 (17:57 -0800)
Doc/library/functions.rst
Doc/library/stdtypes.rst
Doc/whatsnew/3.10.rst

index e36a1695c2ad58aa6fd8b950074f581a8236d9ea..370decc51087f2b3583b23862c1c7efbb67369a0 100644 (file)
@@ -870,19 +870,27 @@ are always available.  They are listed here in alphabetical order.
    class>`) subclass thereof.  If *object* is not
    an object of the given type, the function always returns ``False``.
    If *classinfo* is a tuple of type objects (or recursively, other such
-   tuples), return ``True`` if *object* is an instance of any of the types.
+   tuples) or a :ref:`types-union` of multiple types, return ``True`` if
+   *object* is an instance of any of the types.
    If *classinfo* is not a type or tuple of types and such tuples,
    a :exc:`TypeError` exception is raised.
 
+   .. versionchanged:: 3.10
+      *classinfo* can be a :ref:`types-union`.
+
 
 .. function:: issubclass(class, classinfo)
 
    Return ``True`` if *class* is a subclass (direct, indirect or :term:`virtual
    <abstract base class>`) of *classinfo*.  A
    class is considered a subclass of itself. *classinfo* may be a tuple of class
-   objects, in which case every entry in *classinfo* will be checked. In any other
+   objects or a :ref:`types-union`, in which case every entry in *classinfo*
+   will be checked. In any other
    case, a :exc:`TypeError` exception is raised.
 
+   .. versionchanged:: 3.10
+      *classinfo* can be a :ref:`types-union`.
+
 
 .. function:: iter(object[, sentinel])
 
index 2331849c02e9828515baa2a376ab7afae4f02345..0929f3271e0519fa3350a2bfed694bf13120f57b 100644 (file)
@@ -5022,8 +5022,10 @@ enables cleaner type hinting syntax compared to :data:`typing.Union`.
       str | None == typing.Optional[str]
 
 .. describe:: isinstance(obj, union_object)
+.. describe:: issubclass(obj, union_object)
 
-   Calls to :func:`isinstance` are also supported with a union object::
+   Calls to :func:`isinstance` and :func:`issubclass` are also supported with a
+   union object::
 
       >>> isinstance("", int | str)
       True
@@ -5036,21 +5038,6 @@ enables cleaner type hinting syntax compared to :data:`typing.Union`.
         File "<stdin>", line 1, in <module>
       TypeError: isinstance() argument 2 cannot contain a parameterized generic
 
-.. describe:: issubclass(obj, union_object)
-
-   Calls to :func:`issubclass` are also supported with a union object::
-
-      >>> issubclass(bool, int | str)
-      True
-
-   However, union objects containing :ref:`parameterized generics
-   <types-genericalias>` cannot be used::
-
-      >>> issubclass(bool, bool | list[str])
-      Traceback (most recent call last):
-        File "<stdin>", line 1, in <module>
-      TypeError: issubclass() argument 2 cannot contain a parameterized generic
-
 The user-exposed type for the union object can be accessed from
 :data:`types.Union` and used for :func:`isinstance` checks.  An object cannot be
 instantiated from the type::
index fa8b6aa54fe9027cc8b4eaaf9c9e699e3960d8d7..96892ba3d37e1084fb41fbab88b876e4abbd9c96 100644 (file)
@@ -193,7 +193,13 @@ Type hints can now be written in a more succinct manner::
        return number ** 2
 
 
-See :pep:`604` for more details.
+This new syntax is also accepted as the second argument to :func:`isinstance`
+and :func:`issubclass`::
+
+   >>> isinstance(1, int | str)
+   True
+
+See :ref:`types-union` and :pep:`604` for more details.
 
 (Contributed by Maggie Moss and Philippe Prados in :issue:`41428`.)