#include #include void clear_slots(PyTypeObject* type, PyObject* self) { Py_ssize_t n = Py_SIZE(type); PyMemberDef* mp = type->tp_members; for (Py_ssize_t i = 0; i < n; i++, mp++) { if (mp->type == T_OBJECT_EX && !(mp->flags & READONLY)) { char* addr = (char*)self + mp->offset; PyObject* obj = *(PyObject**)addr; if (obj != nullptr) { *(PyObject**)addr = nullptr; Py_DECREF(obj); } } } }