Ensure super() lookup of descriptor from classmethod works (SF #743627)

This commit is contained in:
Phillip J. Eby 2004-03-25 02:19:34 +00:00
parent 2786d90617
commit 91a968af76
2 changed files with 22 additions and 1 deletions

View File

@ -2064,6 +2064,20 @@ def supers():
vereq(dd.x, "hello")
vereq(super(DDsub, dd).x, 42)
# Ensure that super() lookup of descriptor from classmethod
# works (SF ID# 743627)
class Base(object):
aProp = property(lambda self: "foo")
class Sub(Base):
def test(klass):
return super(Sub,klass).aProp
test = classmethod(test)
veris(Sub.test(), Base.aProp)
def inherits():
if verbose: print "Testing inheritance from basic types..."

View File

@ -5537,7 +5537,14 @@ super_getattro(PyObject *self, PyObject *name)
Py_INCREF(res);
f = res->ob_type->tp_descr_get;
if (f != NULL) {
tmp = f(res, su->obj,
tmp = f(res,
/* Only pass 'obj' param if
this is instance-mode super
(See SF ID #743627)
*/
(su->obj==su->obj_type
? (PyObject *)NULL
: su->obj),
(PyObject *)starttype);
Py_DECREF(res);
res = tmp;