summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
Diffstat (limited to 'Objects')
-rw-r--r--Objects/abstract.c20
-rw-r--r--Objects/typeobject.c21
2 files changed, 8 insertions, 33 deletions
diff --git a/Objects/abstract.c b/Objects/abstract.c
index cc125f5..ae536a7 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -2574,14 +2574,8 @@ PyObject_IsInstance(PyObject *inst, PyObject *cls)
Py_LeaveRecursiveCall();
return r;
}
- if (name == NULL) {
- name = PyUnicode_InternFromString("__instancecheck__");
- if (name == NULL)
- return -1;
- }
- checker = PyObject_GetAttr(cls, name);
- if (checker == NULL && PyErr_Occurred())
- PyErr_Clear();
+
+ checker = _PyObject_LookupSpecial(cls, "__instancecheck__", &name);
if (checker != NULL) {
PyObject *res;
int ok = -1;
@@ -2644,14 +2638,8 @@ PyObject_IsSubclass(PyObject *derived, PyObject *cls)
Py_LeaveRecursiveCall();
return r;
}
- if (name == NULL) {
- name = PyUnicode_InternFromString("__subclasscheck__");
- if (name == NULL)
- return -1;
- }
- PyErr_Fetch(&t, &v, &tb);
- checker = PyObject_GetAttr(cls, name);
- PyErr_Restore(t, v, tb);
+
+ checker = _PyObject_LookupSpecial(cls, "__subclasscheck__", &name);
if (checker != NULL) {
PyObject *res;
int ok = -1;
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 7e81ce6..0035f6d 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -599,14 +599,6 @@ type___instancecheck__(PyObject *type, PyObject *inst)
static PyObject *
-type_get_instancecheck(PyObject *type, void *context)
-{
- static PyMethodDef ml = {"__instancecheck__",
- type___instancecheck__, METH_O };
- return PyCFunction_New(&ml, type);
-}
-
-static PyObject *
type___subclasscheck__(PyObject *type, PyObject *inst)
{
switch (_PyObject_RealIsSubclass(inst, type)) {
@@ -619,13 +611,6 @@ type___subclasscheck__(PyObject *type, PyObject *inst)
}
}
-static PyObject *
-type_get_subclasscheck(PyObject *type, void *context)
-{
- static PyMethodDef ml = {"__subclasscheck__",
- type___subclasscheck__, METH_O };
- return PyCFunction_New(&ml, type);
-}
static PyGetSetDef type_getsets[] = {
{"__name__", (getter)type_name, (setter)type_set_name, NULL},
@@ -635,8 +620,6 @@ static PyGetSetDef type_getsets[] = {
(setter)type_set_abstractmethods, NULL},
{"__dict__", (getter)type_dict, NULL, NULL},
{"__doc__", (getter)type_get_doc, NULL, NULL},
- {"__instancecheck__", (getter)type_get_instancecheck, NULL, NULL},
- {"__subclasscheck__", (getter)type_get_subclasscheck, NULL, NULL},
{0}
};
@@ -2518,6 +2501,10 @@ static PyMethodDef type_methods[] = {
METH_VARARGS | METH_KEYWORDS | METH_CLASS,
PyDoc_STR("__prepare__() -> dict\n"
"used to create the namespace for the class statement")},
+ {"__instancecheck__", type___instancecheck__, METH_O,
+ PyDoc_STR("__instancecheck__() -> check if an object is an instance")},
+ {"__subclasscheck__", type___subclasscheck__, METH_O,
+ PyDoc_STR("__subclasschck__ -> check if an class is a subclass")},
{0}
};