]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.11] gh-96746: Docs: Clear up Py_TPFLAGS_DISALLOW_INSTANTIATION inheritance (GH...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 7 Nov 2022 18:55:58 +0000 (10:55 -0800)
committerGitHub <noreply@github.com>
Mon, 7 Nov 2022 18:55:58 +0000 (19:55 +0100)
gh-96746: Docs: Clear up Py_TPFLAGS_DISALLOW_INSTANTIATION inheritance (GH-99002)

The flag is not inherited, but its effect -- a NULL tp_new -- is.

Drop hints for people who come here wanting to “disallow instantiation”.
(cherry picked from commit 1438b779971605e516bd0a4051a704d6ffbbd58d)

Co-authored-by: Petr Viktorin <encukou@gmail.com>
Doc/c-api/typeobj.rst

index af0d760a30cb8ad43b2886d8e0dd24a1f5ab3bdc..0233a366901f5a81b66200a802d9eda958245deb 100644 (file)
@@ -1213,6 +1213,17 @@ and :c:type:`PyType_Type` effectively act as defaults.)
       **Inheritance:**
 
       This flag is not inherited.
+      However, subclasses will not be instantiable unless they provide a
+      non-NULL :c:member:`~PyTypeObject.tp_new` (which is only possible
+      via the C API).
+
+      .. note::
+
+         To disallow instantiating a class directly but allow instantiating
+         its subclasses (e.g. for an :term:`abstract base class`),
+         do not use this flag.
+         Instead, make :c:member:`~PyTypeObject.tp_new` only succeed for
+         subclasses.
 
       .. versionadded:: 3.10