Skip to content

Commit 7e5327e

Browse files
Implement attribute-based fallback for subscript access
Added attribute-based fallback for __getitem__ method.
1 parent 8c33c61 commit 7e5327e

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

Objects/abstract.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,20 @@ PyObject_GetItem(PyObject *o, PyObject *key)
201201
((PyTypeObject *)o)->tp_name);
202202
return NULL;
203203
}
204+
205+
// Try attribute-based fallback: obj.__getitem__(key)
206+
PyObject *attr_getitem = PyObject_GetAttr(o, &_Py_ID(__getitem__));
207+
if (attr_getitem != NULL) {
208+
if (PyCallable_Check(attr_getitem)) {
209+
PyObject *res = PyObject_CallOneArg(attr_getitem, key);
210+
Py_DECREF(attr_getitem);
211+
return res;
212+
}
213+
Py_DECREF(attr_getitem);
214+
}
215+
else {
216+
PyErr_Clear();
217+
}
204218

205219
return type_error("'%.200s' object is not subscriptable", o);
206220
}

0 commit comments

Comments
 (0)