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):
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:
--- /dev/null
+Fixes ``type.__type_params__`` to return an empty tuple instead of a
+descriptor.
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);