SF bug 542984.

Change type_get_doc (the get function for __doc__) to look in tp_dict
more often, and if it finds a descriptor in tp_dict, to call it (with
a NULL instance).  This means you can add a __doc__ descriptor to a
new-style class that returns instance docs when called on an instance,
and class docs when called on a class -- or the same docs in either
case, but lazily computed.

I'll also check this into the 2.2 maintenance branch.
This commit is contained in:
Guido van Rossum 2002-04-18 00:22:00 +00:00
parent a90a3b471d
commit 6ca7d41c1f
1 changed files with 11 additions and 7 deletions

View File

@ -82,15 +82,19 @@ static PyObject *
type_get_doc(PyTypeObject *type, void *context)
{
PyObject *result;
if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
if (type->tp_doc == NULL) {
Py_INCREF(Py_None);
return Py_None;
}
if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE) && type->tp_doc != NULL)
return PyString_FromString(type->tp_doc);
}
result = PyDict_GetItemString(type->tp_dict, "__doc__");
Py_INCREF(result);
if (result == NULL) {
result = Py_None;
Py_INCREF(result);
}
else if (result->ob_type->tp_descr_get) {
result = result->ob_type->tp_descr_get(result, NULL, type);
}
else {
Py_INCREF(result);
}
return result;
}