summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Objects/classobject.c21
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 */