https://github.com/python/cpython/commit/a76d9f48d5becd2ac9d8aabe6a5684aa8d0750e2
commit: a76d9f48d5becd2ac9d8aabe6a5684aa8d0750e2
branch: 3.13
author: Miss Islington (bot) <[email protected]>
committer: JelleZijlstra <[email protected]>
date: 2026-05-13T03:07:24Z
summary:

[3.13] gh-149574: Document that is_typeddict, is_protocol, is_dataclass, 
isclass return False for generic aliases (GH-149604) (#149752)

gh-149574: Document that is_typeddict, is_protocol, is_dataclass, isclass 
return False for generic aliases (GH-149604)
(cherry picked from commit a4e51c8dac9fdd49ae26ff8c6cd3c808fd8ba15e)

Co-authored-by: Jelle Zijlstra <[email protected]>

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 43efb739a77c31..c163516eae9963 100644
--- a/Doc/library/dataclasses.rst
+++ b/Doc/library/dataclasses.rst
@@ -492,7 +492,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 8a7cdb04f5f269..00e1d77980e080 100644
--- a/Doc/library/inspect.rst
+++ b/Doc/library/inspect.rst
@@ -365,6 +365,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 13275dc760f815..20e021ec4842b8 100644
--- a/Doc/library/stdtypes.rst
+++ b/Doc/library/stdtypes.rst
@@ -5527,7 +5527,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 8569e2e4491f00..0dc71d479592eb 100644
--- a/Doc/library/typing.rst
+++ b/Doc/library/typing.rst
@@ -3340,14 +3340,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
 
@@ -3370,6 +3383,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]

Reply via email to