https://github.com/python/cpython/commit/7f06cd335e91b0ec79c4608f23018c2a785332b1 commit: 7f06cd335e91b0ec79c4608f23018c2a785332b1 branch: 3.12 author: Jelle Zijlstra <[email protected]> committer: JelleZijlstra <[email protected]> date: 2024-05-28T19:54:47Z summary:
[3.12] gh-119011: `type.__type_params__` now return an empty tuple (GH-119296) (#119681) (cherry picked from commit 6b240c2308a044e38623900ccb8fa58c3549d4ae) Co-authored-by: Nikita Sobolev <[email protected]> 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 b73e48789425b7..7f1b80a5e51ec4 100644 --- a/Lib/test/test_functools.py +++ b/Lib/test/test_functools.py @@ -705,6 +705,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 38416315173bd4..ad5339ef4483ee 100644 --- a/Lib/test/test_type_params.py +++ b/Lib/test/test_type_params.py @@ -499,6 +499,11 @@ class C[T]: r"Cannot use [a-z]+ in annotation scope within class scope"): run_code(code.format(case)) + 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 0a21ec8dbb54af..bf2be42f73fdd4 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -1506,8 +1506,11 @@ type_set_annotations(PyTypeObject *type, PyObject *value, void *context) static PyObject * type_get_type_params(PyTypeObject *type, void *context) { - PyObject *params = PyDict_GetItemWithError(lookup_tp_dict(type), &_Py_ID(__type_params__)); + if (type == &PyType_Type) { + return PyTuple_New(0); + } + PyObject *params = PyDict_GetItemWithError(lookup_tp_dict(type), &_Py_ID(__type_params__)); if (params) { return Py_NewRef(params); } _______________________________________________ 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]
