summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2024-06-11 09:52:27 (GMT)
committerGitHub <noreply@github.com>2024-06-11 09:52:27 (GMT)
commitf386cc96201bc14ec619108d696951033c56d39a (patch)
tree56d5126016442d36615184d3e8be50d49d95fa48 /Objects
parent7993268beb9442c063d142860135bd5d84c2946e (diff)
downloadcpython-f386cc96201bc14ec619108d696951033c56d39a.zip
cpython-f386cc96201bc14ec619108d696951033c56d39a.tar.gz
cpython-f386cc96201bc14ec619108d696951033c56d39a.tar.bz2
[3.13] bpo-24766: doc= argument to subclasses of property not handled correctly (GH-2487) (GH-120305)
(cherry picked from commit 4829522b8d3e1a28930f1cccfcc9635e035a0eb4) Co-authored-by: E. M. Bray <erik.bray@lri.fr> Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Diffstat (limited to 'Objects')
-rw-r--r--Objects/descrobject.c19
1 files changed, 4 insertions, 15 deletions
diff --git a/Objects/descrobject.c b/Objects/descrobject.c
index 1b7e2fd..4eccd17 100644
--- a/Objects/descrobject.c
+++ b/Objects/descrobject.c
@@ -1859,22 +1859,9 @@ property_init_impl(propertyobject *self, PyObject *fget, PyObject *fset,
/* if no docstring given and the getter has one, use that one */
else if (fget != NULL) {
int rc = PyObject_GetOptionalAttr(fget, &_Py_ID(__doc__), &prop_doc);
- if (rc <= 0) {
+ if (rc < 0) {
return rc;
}
- if (!Py_IS_TYPE(self, &PyProperty_Type) &&
- prop_doc != NULL && prop_doc != Py_None) {
- // This oddity preserves the long existing behavior of surfacing
- // an AttributeError when using a dict-less (__slots__) property
- // subclass as a decorator on a getter method with a docstring.
- // See PropertySubclassTest.test_slots_docstring_copy_exception.
- int err = PyObject_SetAttr(
- (PyObject *)self, &_Py_ID(__doc__), prop_doc);
- if (err < 0) {
- Py_DECREF(prop_doc); // release our new reference.
- return -1;
- }
- }
if (prop_doc == Py_None) {
prop_doc = NULL;
Py_DECREF(Py_None);
@@ -1902,7 +1889,9 @@ property_init_impl(propertyobject *self, PyObject *fget, PyObject *fset,
Py_DECREF(prop_doc);
if (err < 0) {
assert(PyErr_Occurred());
- if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
+ if (!self->getter_doc &&
+ PyErr_ExceptionMatches(PyExc_AttributeError))
+ {
PyErr_Clear();
// https://github.com/python/cpython/issues/98963#issuecomment-1574413319
// Python silently dropped this doc assignment through 3.11.