mirror of https://github.com/python/cpython
gh-113157 gh-89519: Fix method descriptors (gh-113233)
Restore behaviors before classmethod descriptor chaining was introduced.
This commit is contained in:
parent
6a5b4736e5
commit
d058eaeed4
|
@ -5004,6 +5004,21 @@ class ClassPropertiesAndMethods(unittest.TestCase):
|
|||
gc.collect()
|
||||
self.assertEqual(Parent.__subclasses__(), [])
|
||||
|
||||
def test_instance_method_get_behavior(self):
|
||||
# test case for gh-113157
|
||||
|
||||
class A:
|
||||
def meth(self):
|
||||
return self
|
||||
|
||||
class B:
|
||||
pass
|
||||
|
||||
a = A()
|
||||
b = B()
|
||||
b.meth = a.meth.__get__(b, B)
|
||||
self.assertEqual(b.meth(), a)
|
||||
|
||||
def test_attr_raise_through_property(self):
|
||||
# test case for gh-103272
|
||||
class A:
|
||||
|
|
|
@ -319,6 +319,13 @@ method_traverse(PyMethodObject *im, visitproc visit, void *arg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
method_descr_get(PyObject *meth, PyObject *obj, PyObject *cls)
|
||||
{
|
||||
Py_INCREF(meth);
|
||||
return meth;
|
||||
}
|
||||
|
||||
PyTypeObject PyMethod_Type = {
|
||||
PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
||||
.tp_name = "method",
|
||||
|
@ -339,6 +346,7 @@ PyTypeObject PyMethod_Type = {
|
|||
.tp_methods = method_methods,
|
||||
.tp_members = method_memberlist,
|
||||
.tp_getset = method_getset,
|
||||
.tp_descr_get = method_descr_get,
|
||||
.tp_new = method_new,
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue