After #53875: PyObject_HasAttr is not an equivalent of hasattr.
PyObject_HasAttrWithError is; it already has the note.
.. c:function:: int PyObject_HasAttr(PyObject *o, PyObject *attr_name)
- Returns ``1`` if *o* has the attribute *attr_name*, and ``0`` otherwise. This
- is equivalent to the Python expression ``hasattr(o, attr_name)``. This function
- always succeeds.
+ Returns ``1`` if *o* has the attribute *attr_name*, and ``0`` otherwise.
+ This function always succeeds.
.. note::