GeezerVison is showing github.com — bpo-44732: Rename types.Union to types.UnionType by AliyevH · Pull Request #27342 · python/cpython
bpo-44732: Rename types.Union to types.UnionType
#27342
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement . We’ll occasionally send you account related emails.
Already on GitHub?
Sign in
to your account
Uh oh!
There was an error while loading. Please reload this page.
Show file tree
Hide file tree
Changes from all commits
Commits
File filter
Filter by extension
.c
(1)
.py
(3)
.rst
(3)
All 3 file types selected
Viewed files
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Hide whitespace
Diff view
Hide whitespace
There are no files selected for viewing
Original file line number
Diff line number
Diff 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
Original file line number
Diff line number
Diff 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
Original file line number
Diff line number
Diff 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
Original file line number
Diff line number
Diff 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
Original file line number
Diff line number
Diff 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 Down
Expand 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 Down
Expand 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 Down
Expand 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 Down
Expand 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 Down
Expand 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 Down
Expand 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 Down
Expand 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 number
Diff line number
Diff line change
@@ -0,0 +1 @@
Rename ``types.Union`` to ``types.UnionType``.
Original file line number
Diff line number
Diff 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 Down
Expand 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
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.