property_descr_get(): Fix a curious bug in the property() type: when

no get function was defined, the property's doc string was
inaccessible.  This was because the test for prop_get was made
*before* the test for a NULL/None object argument.

Also changed the property class defined in Python in a comment to test
for NULL to decide between get and delete; this makes it less Python
but then, assigning None to a property doesn't delete it!
This commit is contained in:
Guido van Rossum 2001-12-10 18:00:15 +00:00
parent 6048ce95a9
commit b75ba918d6

View file

@ -911,7 +911,7 @@ PyWrapper_New(PyObject *d, PyObject *self)
self.__doc__ = doc
def __get__(self, inst, type=None):
if self.__get is None:
if self.__get is NULL:
raise AttributeError, "unreadable attribute"
if inst is None:
return self
@ -963,14 +963,14 @@ property_descr_get(PyObject *self, PyObject *obj, PyObject *type)
{
propertyobject *gs = (propertyobject *)self;
if (gs->prop_get == NULL) {
PyErr_SetString(PyExc_AttributeError, "unreadable attribute");
return NULL;
}
if (obj == NULL || obj == Py_None) {
Py_INCREF(self);
return self;
}
if (gs->prop_get == NULL) {
PyErr_SetString(PyExc_AttributeError, "unreadable attribute");
return NULL;
}
return PyObject_CallFunction(gs->prop_get, "(O)", obj);
}