Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Doc/library/stdtypes.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -5040,16 +5040,16 @@ enables cleaner type hinting syntax compared to :data:`typing.Union`.
TypeError: isinstance() 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
:data:`types.UnionType` and used for :func:`isinstance` checks. An object cannot be
instantiated from the type::

>>> import types
>>> isinstance(int | str, types.Union)
>>> isinstance(int | str, types.UnionType)
True
>>> types.Union()
>>> types.UnionType()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot create 'types.Union' instances
TypeError: cannot create 'types.UnionType' instances

.. note::
The :meth:`__or__` method for type objects was added to support the syntax
Expand Down
2 changes: 1 addition & 1 deletion Doc/library/types.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -312,7 +312,7 @@ Standard names are defined for the following types:
This type can now be subclassed.


.. data:: Union
.. data:: UnionType

The type of :ref:`union type expressions<types-union>`.

Expand Down
2 changes: 1 addition & 1 deletion Lib/test/test_typing.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -3090,7 +3090,7 @@ class C(Generic[T]): pass
self.assertIs(get_origin(Callable), collections.abc.Callable)
self.assertIs(get_origin(list[int]), list)
self.assertIs(get_origin(list), None)
self.assertIs(get_origin(list | str), types.Union)
self.assertIs(get_origin(list | str), types.UnionType)
self.assertIs(get_origin(P.args), P)
self.assertIs(get_origin(P.kwargs), P)

Expand Down
3 changes: 1 addition & 2 deletions Lib/types.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -297,9 +297,8 @@ def wrapped(*args, **kwargs):

return wrapped


GenericAlias = type(list[int])
Union = type(int | str)
UnionType = type(int | str)

EllipsisType = type(Ellipsis)
NoneType = type(None)
Expand Down
22 changes: 11 additions & 11 deletions Lib/typing.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -175,7 +175,7 @@ def _type_check(arg, msg, is_argument=True, module=None):
return arg
if isinstance(arg, _SpecialForm) or arg in (Generic, Protocol):
raise TypeError(f"Plain{arg} is not valid as type argument")
if isinstance(arg, (type, TypeVar, ForwardRef, types.Union, ParamSpec)):
if isinstance(arg, (type, TypeVar, ForwardRef, types.UnionType, ParamSpec)):
return arg
if not callable(arg):
raise TypeError(f"{msg} Got{arg!r:.100}.")
Expand DownExpand Up@@ -215,7 +215,7 @@ def _collect_type_vars(types_, typevar_types=None):
for t in types_:
if isinstance(t, typevar_types) and t not in tvars:
tvars.append(t)
if isinstance(t, (_GenericAlias, GenericAlias, types.Union)):
if isinstance(t, (_GenericAlias, GenericAlias, types.UnionType)):
tvars.extend([t for t in t.__parameters__ if t not in tvars])
return tuple(tvars)

Expand DownExpand Up@@ -268,7 +268,7 @@ def _remove_dups_flatten(parameters):
# Flatten out Union[Union[...], ...].
params = []
for p in parameters:
if isinstance(p, (_UnionGenericAlias, types.Union)):
if isinstance(p, (_UnionGenericAlias, types.UnionType)):
params.extend(p.__args__)
elif isinstance(p, tuple) and len(p) > 0 and p[0] is Union:
params.extend(p[1:])
Expand DownExpand Up@@ -322,13 +322,13 @@ def _eval_type(t, globalns, localns, recursive_guard=frozenset()):
"""
if isinstance(t, ForwardRef):
return t._evaluate(globalns, localns, recursive_guard)
if isinstance(t, (_GenericAlias, GenericAlias, types.Union)):
if isinstance(t, (_GenericAlias, GenericAlias, types.UnionType)):
ev_args = tuple(_eval_type(a, globalns, localns, recursive_guard) for a in t.__args__)
if ev_args == t.__args__:
return t
if isinstance(t, GenericAlias):
return GenericAlias(t.__origin__, ev_args)
if isinstance(t, types.Union):
if isinstance(t, types.UnionType):
return functools.reduce(operator.or_, ev_args)
else:
return t.copy_with(ev_args)
Expand DownExpand Up@@ -1038,7 +1038,7 @@ def __getitem__(self, params):
for arg in self.__args__:
if isinstance(arg, self._typevar_types):
arg = subst[arg]
elif isinstance(arg, (_GenericAlias, GenericAlias, types.Union)):
elif isinstance(arg, (_GenericAlias, GenericAlias, types.UnionType)):
subparams = arg.__parameters__
if subparams:
subargs = tuple(subst[x] for x in subparams)
Expand DownExpand Up@@ -1206,7 +1206,7 @@ def copy_with(self, params):
return Union[params]

def __eq__(self, other):
if not isinstance(other, (_UnionGenericAlias, types.Union)):
if not isinstance(other, (_UnionGenericAlias, types.UnionType)):
return NotImplemented
return set(self.__args__) == set(other.__args__)

Expand DownExpand Up@@ -1810,7 +1810,7 @@ def _strip_annotations(t):
if stripped_args == t.__args__:
return t
return GenericAlias(t.__origin__, stripped_args)
if isinstance(t, types.Union):
if isinstance(t, types.UnionType):
stripped_args = tuple(_strip_annotations(a) for a in t.__args__)
if stripped_args == t.__args__:
return t
Expand DownExpand Up@@ -1841,8 +1841,8 @@ def get_origin(tp):
return tp.__origin__
if tp is Generic:
return Generic
if isinstance(tp, types.Union):
return types.Union
if isinstance(tp, types.UnionType):
return types.UnionType
return None


Expand All@@ -1866,7 +1866,7 @@ def get_args(tp):
or isinstance(res[0], (ParamSpec, _ConcatenateGenericAlias)))):
res = (list(res[:-1]), res[-1])
return res
if isinstance(tp, types.Union):
if isinstance(tp, types.UnionType):
return tp.__args__
return ()

Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
Rename ``types.Union`` to ``types.UnionType``.
6 changes: 3 additions & 3 deletions Objects/unionobject.c
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
// types.Union -- used to represent e.g. Union[int, str], int | str
// types.UnionType -- used to represent e.g. Union[int, str], int | str
#include "Python.h"
#include "pycore_object.h" // _PyObject_GC_TRACK/UNTRACK
#include "pycore_unionobject.h"
Expand DownExpand Up@@ -414,7 +414,7 @@ union_parameters(PyObject *self, void *Py_UNUSED(unused))
}

static PyGetSetDef union_properties[] ={
{"__parameters__", union_parameters, (setter)NULL, "Type variables in the types.Union.", NULL},
{"__parameters__", union_parameters, (setter)NULL, "Type variables in the types.UnionType.", NULL},
{0}
};

Expand All@@ -424,7 +424,7 @@ static PyNumberMethods union_as_number ={

PyTypeObject _PyUnion_Type ={
PyVarObject_HEAD_INIT(&PyType_Type, 0)
.tp_name = "types.Union",
.tp_name = "types.UnionType",
.tp_doc = "Represent a PEP 604 union type\n"
"\n"
"E.g. for int | str",
Expand Down