diff options
-rw-r--r-- | Objects/classobject.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/Objects/classobject.c b/Objects/classobject.c index 80b7ae5..9f4d155 100644 --- a/Objects/classobject.c +++ b/Objects/classobject.c @@ -781,6 +781,25 @@ instance_repr(PyInstanceObject *inst) return res; } +static PyObject * +instance_str(PyInstanceObject *inst) +{ + PyObject *func; + PyObject *res; + static PyObject *strstr; + + if (strstr == NULL) + strstr = PyString_InternFromString("__str__"); + func = instance_getattr(inst, strstr); + if (func == NULL) { + PyErr_Clear(); + return instance_repr(inst); + } + res = PyEval_CallObject(func, (PyObject *)NULL); + Py_DECREF(func); + return res; +} + static long instance_hash(PyInstanceObject *inst) { @@ -1827,7 +1846,7 @@ PyTypeObject PyInstance_Type = { &instance_as_mapping, /* tp_as_mapping */ (hashfunc)instance_hash, /* tp_hash */ 0, /* tp_call */ - 0, /* tp_str */ + (reprfunc)instance_str, /* tp_str */ (getattrofunc)instance_getattr, /* tp_getattro */ (setattrofunc)instance_setattr, /* tp_setattro */ 0, /* tp_as_buffer */ |