summaryrefslogtreecommitdiffstats
path: root/Doc/whatsnew
diff options
context:
space:
mode:
authorPetr Viktorin <encukou@gmail.com>2023-05-03 13:17:14 (GMT)
committerGitHub <noreply@github.com>2023-05-03 13:17:14 (GMT)
commit524a7f77fd8244835e382f076dd4a76404580bb3 (patch)
tree2c4cf20e01075972e4861d8cfc54ec5902af1233 /Doc/whatsnew
parent423d7faeb37b6c13b3ebbf9255165fefc651983e (diff)
downloadcpython-524a7f77fd8244835e382f076dd4a76404580bb3.zip
cpython-524a7f77fd8244835e382f076dd4a76404580bb3.tar.gz
cpython-524a7f77fd8244835e382f076dd4a76404580bb3.tar.bz2
gh-103968: Deprecate creating heap types whose metaclass has custom tp_new. (GH-103972)
(That's a mouthful of an edge case!) Co-authored-by: Barney Gale <barney.gale@gmail.com>
Diffstat (limited to 'Doc/whatsnew')
-rw-r--r--Doc/whatsnew/3.12.rst20
1 files changed, 20 insertions, 0 deletions
diff --git a/Doc/whatsnew/3.12.rst b/Doc/whatsnew/3.12.rst
index 3381ce7..63db5d3 100644
--- a/Doc/whatsnew/3.12.rst
+++ b/Doc/whatsnew/3.12.rst
@@ -1320,6 +1320,21 @@ Porting to Python 3.12
available on debug builds. If you happen to be using it then you'll
need to start using ``_Py_GetGlobalRefTotal()``.
+* The following functions now select an appropriate metaclass for the newly
+ created type:
+
+ * :c:func:`PyType_FromSpec`
+ * :c:func:`PyType_FromSpecWithBases`
+ * :c:func:`PyType_FromModuleAndSpec`
+
+ Creating classes whose metaclass overrides :c:member:`~PyTypeObject.tp_new`
+ is deprecated, and in Python 3.14+ it will be disallowed.
+ Note that these functions ignore ``tp_new`` of the metaclass, possibly
+ allowing incomplete initialization.
+
+ Note that :c:func:`PyType_FromMetaclass` (added in Python 3.12)
+ already disallows creating classes whose metaclass overrides ``tp_new``.
+
Deprecated
----------
@@ -1396,6 +1411,11 @@ Deprecated
* ``_PyErr_ChainExceptions`` is deprecated. Use ``_PyErr_ChainExceptions1``
instead. (Contributed by Irit Katriel in :gh:`102192`.)
+* Using :c:func:`PyType_FromSpec`, :c:func:`PyType_FromSpecWithBases`
+ or :c:func:`PyType_FromModuleAndSpec` to create a class whose metaclass
+ overrides :c:member:`~PyTypeObject.tp_new` is deprecated.
+ Call the metaclass instead.
+
Removed
-------