https://github.com/python/cpython/commit/6b240c2308a044e38623900ccb8fa58c3549d4ae
commit: 6b240c2308a044e38623900ccb8fa58c3549d4ae
branch: main
author: Nikita Sobolev <[email protected]>
committer: JelleZijlstra <[email protected]>
date: 2024-05-28T18:12:58Z
summary:
gh-119011: `type.__type_params__` now return an empty tuple (#119296)
files:
A Misc/NEWS.d/next/Core and
Builtins/2024-05-21-09-46-51.gh-issue-119011.WOe3bu.rst
M Lib/test/test_functools.py
M Lib/test/test_type_params.py
M Objects/typeobject.c
diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py
index 4a9a7313712f60..26701ea8b4daf9 100644
--- a/Lib/test/test_functools.py
+++ b/Lib/test/test_functools.py
@@ -710,6 +710,14 @@ def wrapper():
self.assertTrue(wrapper.__doc__.startswith('max('))
self.assertEqual(wrapper.__annotations__, {})
+ def test_update_type_wrapper(self):
+ def wrapper(*args): pass
+
+ functools.update_wrapper(wrapper, type)
+ self.assertEqual(wrapper.__name__, 'type')
+ self.assertEqual(wrapper.__annotations__, {})
+ self.assertEqual(wrapper.__type_params__, ())
+
class TestWraps(TestUpdateWrapper):
diff --git a/Lib/test/test_type_params.py b/Lib/test/test_type_params.py
index aa9d4088bd7ccc..bf1a34b9fc82b3 100644
--- a/Lib/test/test_type_params.py
+++ b/Lib/test/test_type_params.py
@@ -563,6 +563,11 @@ class C[T, U]:
self.assertIs(T, C.Alias.__type_params__[0])
self.assertIs(U, C.__type_params__[1])
+ def test_type_special_case(self):
+ # https://github.com/python/cpython/issues/119011
+ self.assertEqual(type.__type_params__, ())
+ self.assertEqual(object.__type_params__, ())
+
def make_base(arg):
class Base:
diff --git a/Misc/NEWS.d/next/Core and
Builtins/2024-05-21-09-46-51.gh-issue-119011.WOe3bu.rst b/Misc/NEWS.d/next/Core
and Builtins/2024-05-21-09-46-51.gh-issue-119011.WOe3bu.rst
new file mode 100644
index 00000000000000..0083c18da13278
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and
Builtins/2024-05-21-09-46-51.gh-issue-119011.WOe3bu.rst
@@ -0,0 +1,2 @@
+Fixes ``type.__type_params__`` to return an empty tuple instead of a
+descriptor.
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 11f9c570ac4971..9d849d83082ccd 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -1848,6 +1848,10 @@ type_set_annotations(PyTypeObject *type, PyObject
*value, void *context)
static PyObject *
type_get_type_params(PyTypeObject *type, void *context)
{
+ if (type == &PyType_Type) {
+ return PyTuple_New(0);
+ }
+
PyObject *params;
if (PyDict_GetItemRef(lookup_tp_dict(type), &_Py_ID(__type_params__),
¶ms) == 0) {
return PyTuple_New(0);
_______________________________________________
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]