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
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}.")
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)
# 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:])
"""
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)
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)
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__)
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
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
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 ()
-// 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"
}
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}
};
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",