mirror of https://github.com/python/cpython
Ensure super() lookup of descriptor from classmethod works (SF #743627)
This commit is contained in:
parent
2786d90617
commit
91a968af76
|
@ -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..."
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue