mirror of
https://github.com/python/cpython.git
synced 2024-11-26 11:24:40 +08:00
classobject.c:instancemethod_descr_get(): when a bound method is
assigned to a class variable and then accessed via an instance, it should not be rebound. test_descr.py:methods(): test for the condition above.
This commit is contained in:
parent
2907fe6ce7
commit
501c7c7d0e
@ -862,7 +862,7 @@ def methods():
|
||||
d2 = D(2)
|
||||
verify(d2.foo() == 2)
|
||||
verify(d2.boo() == 2)
|
||||
verify(d2.goo() == 2)
|
||||
verify(d2.goo() == 1)
|
||||
|
||||
def specials():
|
||||
# Test operators like __hash__ for which a built-in default exists
|
||||
|
@ -2196,6 +2196,11 @@ instancemethod_call(PyObject *func, PyObject *arg, PyObject *kw)
|
||||
static PyObject *
|
||||
instancemethod_descr_get(PyObject *meth, PyObject *obj, PyObject *type)
|
||||
{
|
||||
if (PyMethod_GET_SELF(meth) != NULL) {
|
||||
/* Don't rebind an already bound method */
|
||||
Py_INCREF(meth);
|
||||
return meth;
|
||||
}
|
||||
if (obj == Py_None)
|
||||
obj = NULL;
|
||||
return PyMethod_New(PyMethod_GET_FUNCTION(meth), obj, type);
|
||||
|
Loading…
Reference in New Issue
Block a user