mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
bpo-32226: Make __class_getitem__ an automatic class method. (#5098)
This commit is contained in:
parent
87be28f4a1
commit
ce5b0e9db1
5 changed files with 31 additions and 12 deletions
|
@ -55,6 +55,7 @@ static size_t method_cache_collisions = 0;
|
|||
/* alphabetical order */
|
||||
_Py_IDENTIFIER(__abstractmethods__);
|
||||
_Py_IDENTIFIER(__class__);
|
||||
_Py_IDENTIFIER(__class_getitem__);
|
||||
_Py_IDENTIFIER(__delitem__);
|
||||
_Py_IDENTIFIER(__dict__);
|
||||
_Py_IDENTIFIER(__doc__);
|
||||
|
@ -2694,8 +2695,8 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
|
|||
Py_DECREF(tmp);
|
||||
}
|
||||
|
||||
/* Special-case __init_subclass__: if it's a plain function,
|
||||
make it a classmethod */
|
||||
/* Special-case __init_subclass__ and __class_getitem__:
|
||||
if they are plain functions, make them classmethods */
|
||||
tmp = _PyDict_GetItemId(dict, &PyId___init_subclass__);
|
||||
if (tmp != NULL && PyFunction_Check(tmp)) {
|
||||
tmp = PyClassMethod_New(tmp);
|
||||
|
@ -2708,6 +2709,18 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
|
|||
Py_DECREF(tmp);
|
||||
}
|
||||
|
||||
tmp = _PyDict_GetItemId(dict, &PyId___class_getitem__);
|
||||
if (tmp != NULL && PyFunction_Check(tmp)) {
|
||||
tmp = PyClassMethod_New(tmp);
|
||||
if (tmp == NULL)
|
||||
goto error;
|
||||
if (_PyDict_SetItemId(dict, &PyId___class_getitem__, tmp) < 0) {
|
||||
Py_DECREF(tmp);
|
||||
goto error;
|
||||
}
|
||||
Py_DECREF(tmp);
|
||||
}
|
||||
|
||||
/* Add descriptors for custom slots from __slots__, or for __dict__ */
|
||||
mp = PyHeapType_GET_MEMBERS(et);
|
||||
slotoffset = base->tp_basicsize;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue