]> granicus.if.org Git - python/commitdiff
property_descr_get(): Fix a curious bug in the property() type: when
authorGuido van Rossum <guido@python.org>
Mon, 10 Dec 2001 18:00:15 +0000 (18:00 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 10 Dec 2001 18:00:15 +0000 (18:00 +0000)
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!

Objects/descrobject.c

index c5e793d874e342a2bfd44d03d2e4fe00b74fa093..850630245429da54ef42b22bbf672a07b65ccdc7 100644 (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);
 }