]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.10] 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:56:21 +0000 (10:56 -0800)
committerGitHub <noreply@github.com>
Mon, 7 Nov 2022 18:56:21 +0000 (19:56 +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 21385afb552fa945c8c627ba3c9977f35b8119c1..b8ec2e15f3f3584b9eff38ab5425ede466bfe559 100644 (file)
@@ -1212,6 +1212,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