https://github.com/python/cpython/commit/a4e51c8dac9fdd49ae26ff8c6cd3c808fd8ba15e
commit: a4e51c8dac9fdd49ae26ff8c6cd3c808fd8ba15e
branch: main
author: Jelle Zijlstra <[email protected]>
committer: JelleZijlstra <[email protected]>
date: 2026-05-12T20:00:01-07:00
summary:
gh-149574: Document that is_typeddict, is_protocol, is_dataclass, isclass
return False for generic aliases (#149604)
files:
M Doc/library/dataclasses.rst
M Doc/library/inspect.rst
M Doc/library/stdtypes.rst
M Doc/library/typing.rst
diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst
index 0bce3e5b762b8b..a09c28ad979158 100644
--- a/Doc/library/dataclasses.rst
+++ b/Doc/library/dataclasses.rst
@@ -498,7 +498,8 @@ Module contents
.. function:: is_dataclass(obj)
Return ``True`` if its parameter is a dataclass (including subclasses of a
- dataclass) or an instance of one, otherwise return ``False``.
+ dataclass, but not including :ref:`generic aliases <types-genericalias>`)
+ or an instance of one, otherwise return ``False``.
If you need to know if a class is an instance of a dataclass (and
not a dataclass itself), then add a further check for ``not
diff --git a/Doc/library/inspect.rst b/Doc/library/inspect.rst
index 8713765b8aebfb..48ae9147587c64 100644
--- a/Doc/library/inspect.rst
+++ b/Doc/library/inspect.rst
@@ -416,6 +416,9 @@ attributes (see :ref:`import-mod-attrs` for module
attributes):
Return ``True`` if the object is a class, whether built-in or created in
Python
code.
+ This function returns ``False`` for :ref:`generic aliases
<types-genericalias>` of classes,
+ such as ``list[int]``.
+
.. function:: ismethod(object)
diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst
index 3d943566be34ff..e3bd1a46891adc 100644
--- a/Doc/library/stdtypes.rst
+++ b/Doc/library/stdtypes.rst
@@ -5858,7 +5858,8 @@ type and the :class:`bytes` data type:
``GenericAlias`` objects are instances of the class
:class:`types.GenericAlias`, which can also be used to create ``GenericAlias``
-objects directly.
+objects directly. Specializations of user-defined :ref:`generic classes
<generic-classes>`
+may not be instances of :class:`types.GenericAlias`, but they provide similar
functionality.
.. describe:: T[X, Y, ...]
diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst
index dca51b8014da5a..71b395c80166cc 100644
--- a/Doc/library/typing.rst
+++ b/Doc/library/typing.rst
@@ -3633,14 +3633,27 @@ Introspection helpers
Determine if a type is a :class:`Protocol`.
- For example::
+ For example:
+
+ .. testcode::
class P(Protocol):
def a(self) -> str: ...
b: int
- is_protocol(P) # => True
- is_protocol(int) # => False
+ assert is_protocol(P)
+ assert not is_protocol(int)
+
+ This function only returns true for ``Protocol`` classes, not for
+ :ref:`generic aliases <types-genericalias>` of them:
+
+ .. testcode::
+
+ class GenericP[T](Protocol):
+ def a(self) -> T: ...
+ b: int
+
+ assert not is_protocol(GenericP[int])
.. versionadded:: 3.13
@@ -3663,6 +3676,17 @@ Introspection helpers
# not a typed dict itself
assert not is_typeddict(TypedDict)
+ This function only returns true for ``TypedDict`` classes, not for
+ :ref:`generic aliases <types-genericalias>` of them:
+
+ .. testcode::
+
+ class GenericFilm[T](TypedDict):
+ title: str
+ year: T
+
+ assert not is_typeddict(GenericFilm[int])
+
.. versionadded:: 3.10
.. class:: ForwardRef
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]