mirror of
https://github.com/python/cpython.git
synced 2025-08-02 08:02:56 +00:00
Patch #1434038: property() now uses the getter's docstring if there is
no "doc" argument given. This makes it possible to legitimately use property() as a decorator to produce a read-only property.
This commit is contained in:
parent
f3c4ad1410
commit
533ff6fc06
4 changed files with 33 additions and 0 deletions
|
@ -1081,6 +1081,8 @@ PyWrapper_New(PyObject *d, PyObject *self)
|
|||
class property(object):
|
||||
|
||||
def __init__(self, fget=None, fset=None, fdel=None, doc=None):
|
||||
if doc is None and fget is not None and hasattr(fget, "__doc__"):
|
||||
doc = fget.__doc__
|
||||
self.__get = fget
|
||||
self.__set = fset
|
||||
self.__del = fdel
|
||||
|
@ -1182,6 +1184,7 @@ static int
|
|||
property_init(PyObject *self, PyObject *args, PyObject *kwds)
|
||||
{
|
||||
PyObject *get = NULL, *set = NULL, *del = NULL, *doc = NULL;
|
||||
PyObject *get_doc = NULL;
|
||||
static char *kwlist[] = {"fget", "fset", "fdel", "doc", 0};
|
||||
propertyobject *gs = (propertyobject *)self;
|
||||
|
||||
|
@ -1196,6 +1199,15 @@ property_init(PyObject *self, PyObject *args, PyObject *kwds)
|
|||
if (del == Py_None)
|
||||
del = NULL;
|
||||
|
||||
/* if no docstring given and the getter has one, use that one */
|
||||
if ((doc == NULL || doc == Py_None) && get != NULL &&
|
||||
PyObject_HasAttrString(get, "__doc__")) {
|
||||
if (!(get_doc = PyObject_GetAttrString(get, "__doc__")))
|
||||
return -1;
|
||||
Py_DECREF(get_doc); /* it is INCREF'd again below */
|
||||
doc = get_doc;
|
||||
}
|
||||
|
||||
Py_XINCREF(get);
|
||||
Py_XINCREF(set);
|
||||
Py_XINCREF(del);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue