From 82c690f11ac93f5a3055f614ddd7f1cd29793136 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 30 Apr 2001 14:39:18 +0000 Subject: [PATCH] Well darnit! The innocuous fix I made to PyObject_Print() caused printing of instances not to look for __str__(). Fix this. --- Objects/classobject.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/Objects/classobject.c b/Objects/classobject.c index 80b7ae51f29..9f4d1555e99 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 */