From 4a2a621907679f74d2c8f255902f0565e997f333 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 20 Oct 1997 23:26:11 +0000 Subject: Write a str() function for class objects that returns "modulename.classname" instead of returning the same as repr(). --- Objects/classobject.c | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/Objects/classobject.c b/Objects/classobject.c index d10cbe6..1e8be01 100644 --- a/Objects/classobject.c +++ b/Objects/classobject.c @@ -261,16 +261,50 @@ static PyObject * class_repr(op) PyClassObject *op; { + PyObject *mod = PyDict_GetItemString(op->cl_dict, "__module__"); char buf[140]; char *name; if (op->cl_name == NULL || !PyString_Check(op->cl_name)) name = "?"; else name = PyString_AsString(op->cl_name); - sprintf(buf, "", name, (long)op); + if (mod == NULL || !PyString_Check(mod)) + sprintf(buf, "", name, (long)op); + else + sprintf(buf, "", + PyString_AsString(mod), + name, (long)op); return PyString_FromString(buf); } +static PyObject * +class_str(op) + PyClassObject *op; +{ + PyObject *mod = PyDict_GetItemString(op->cl_dict, "__module__"); + PyObject *name = op->cl_name; + PyObject *res; + int m, n; + + if (name == NULL || !PyString_Check(name)) + return class_repr(op); + if (mod == NULL || !PyString_Check(mod)) { + Py_INCREF(name); + return name; + } + m = PyString_Size(mod); + n = PyString_Size(name); + res = PyString_FromStringAndSize((char *)NULL, m+1+n); + if (res != NULL) { + char *s = PyString_AsString(res); + memcpy(s, PyString_AsString(mod), m); + s += m; + *s++ = '.'; + memcpy(s, PyString_AsString(name), n); + } + return res; +} + PyTypeObject PyClass_Type = { PyObject_HEAD_INIT(&PyType_Type) 0, @@ -288,7 +322,7 @@ PyTypeObject PyClass_Type = { 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ - 0, /*tp_str*/ + (reprfunc)class_str, /*tp_str*/ (getattrofunc)class_getattr, /*tp_getattro*/ (setattrofunc)class_setattr, /*tp_setattro*/ }; -- cgit v0.12