From 81448cfbe399a51d9135dd9e9571d40de9cbc23f Mon Sep 17 00:00:00 2001 From: Jonathan Dung Date: Wed, 27 May 2026 17:52:02 +0800 Subject: [PATCH 1/2] commit --- Doc/library/inspect.rst | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/Doc/library/inspect.rst b/Doc/library/inspect.rst index a0f7379b12a8a62..fd22cc4d9df6bfa 100644 --- a/Doc/library/inspect.rst +++ b/Doc/library/inspect.rst @@ -1644,19 +1644,13 @@ You can handle these with code like the following. Note that for arbitrary getset descriptors invoking these may trigger code execution:: - # example code for resolving the builtin descriptor types - class _foo: - __slots__ = ['foo'] - - slot_descriptor = type(_foo.foo) - getset_descriptor = type(type(open(__file__)).name) - wrapper_descriptor = type(str.__dict__['__add__']) - descriptor_types = (slot_descriptor, getset_descriptor, wrapper_descriptor) + import types + descriptor_types = (types.MemberDescriptorType, types.GetSetDescriptorType, types.WrapperDescriptorType) result = getattr_static(some_object, 'foo') - if type(result) in descriptor_types: + if isinstance(result, descriptor_types): try: - result = result.__get__() + result = result.__get__(some_object) except AttributeError: # descriptors can raise AttributeError to # indicate there is no underlying value From 50f27f9b76282785b24a2db46f128a6292149bea Mon Sep 17 00:00:00 2001 From: Jonathan Dung Date: Sun, 5 Jul 2026 17:11:38 +0800 Subject: [PATCH 2/2] fix --- Doc/library/inspect.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Doc/library/inspect.rst b/Doc/library/inspect.rst index fd22cc4d9df6bfa..8a1b0f737dfb63a 100644 --- a/Doc/library/inspect.rst +++ b/Doc/library/inspect.rst @@ -1645,10 +1645,9 @@ for arbitrary getset descriptors invoking these may trigger code execution:: import types - descriptor_types = (types.MemberDescriptorType, types.GetSetDescriptorType, types.WrapperDescriptorType) result = getattr_static(some_object, 'foo') - if isinstance(result, descriptor_types): + if isinstance(result, (types.MemberDescriptorType, types.GetSetDescriptorType, types.WrapperDescriptorType)): try: result = result.__get__(some_object) except AttributeError: