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:
parent
a90a3b471d
commit
6ca7d41c1f
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue