]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-132457: make staticmethod and classmethod generic (#132460)
authorIvan Kirpichnikov <mmssvvvv570@gmail.com>
Sun, 4 May 2025 16:26:38 +0000 (19:26 +0300)
committerGitHub <noreply@github.com>
Sun, 4 May 2025 16:26:38 +0000 (19:26 +0300)
Co-authored-by: sobolevn <mail@sobolevn.me>
Lib/test/test_genericalias.py
Misc/NEWS.d/next/Core_and_Builtins/2025-04-13-01-50-40.gh-issue-132457.1q-1xz.rst [new file with mode: 0644]
Objects/funcobject.c

index 5c13897b8d9d4f33d013ce0c057adeb4291ebb8f..8d21ded45014ba402596994fce3ff9df3d934e2c 100644 (file)
@@ -137,7 +137,9 @@ class BaseTest(unittest.TestCase):
                      Future, _WorkItem,
                      Morsel,
                      DictReader, DictWriter,
-                     array]
+                     array,
+                     staticmethod,
+                     classmethod]
     if ctypes is not None:
         generic_types.extend((ctypes.Array, ctypes.LibraryLoader, ctypes.py_object))
     if ValueProxy is not None:
diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-04-13-01-50-40.gh-issue-132457.1q-1xz.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-04-13-01-50-40.gh-issue-132457.1q-1xz.rst
new file mode 100644 (file)
index 0000000..5249ff8
--- /dev/null
@@ -0,0 +1 @@
+Make :func:`staticmethod` and :func:`classmethod` generic.
index 6d71dbb5a6affd050e747dba9c4cbc3c59541f5d..56df5730db0c55bc6e5da98d6b2ee1e6ded4ae7a 100644 (file)
@@ -1484,6 +1484,11 @@ static PyGetSetDef cm_getsetlist[] = {
     {NULL} /* Sentinel */
 };
 
+static PyMethodDef cm_methodlist[] = {
+    {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, NULL},
+    {NULL} /* Sentinel */
+};
+
 static PyObject*
 cm_repr(PyObject *self)
 {
@@ -1542,7 +1547,7 @@ PyTypeObject PyClassMethod_Type = {
     0,                                          /* tp_weaklistoffset */
     0,                                          /* tp_iter */
     0,                                          /* tp_iternext */
-    0,                                          /* tp_methods */
+    cm_methodlist,                              /* tp_methods */
     cm_memberlist,                              /* tp_members */
     cm_getsetlist,                              /* tp_getset */
     0,                                          /* tp_base */
@@ -1716,6 +1721,11 @@ static PyGetSetDef sm_getsetlist[] = {
     {NULL} /* Sentinel */
 };
 
+static PyMethodDef sm_methodlist[] = {
+    {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, NULL},
+    {NULL} /* Sentinel */
+};
+
 static PyObject*
 sm_repr(PyObject *self)
 {
@@ -1772,7 +1782,7 @@ PyTypeObject PyStaticMethod_Type = {
     0,                                          /* tp_weaklistoffset */
     0,                                          /* tp_iter */
     0,                                          /* tp_iternext */
-    0,                                          /* tp_methods */
+    sm_methodlist,                              /* tp_methods */
     sm_memberlist,                              /* tp_members */
     sm_getsetlist,                              /* tp_getset */
     0,                                          /* tp_base */