Skip to content

Commit

Permalink
[3.11] gh-75367: Fix data descriptor detection in inspect.getattr_sta…
Browse files Browse the repository at this point in the history
…tic (GH-104517) (#104557)

gh-75367: Fix data descriptor detection in inspect.getattr_static (GH-104517)
(cherry picked from commit 5e9f471)

Co-authored-by: Furkan Onder <furkanonder@protonmail.com>
Co-authored-by: Carl Meyer <carl@oddbird.net>
  • Loading branch information
3 people committed May 16, 2023
1 parent 9cac6c4 commit f748fc9
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 2 deletions.
6 changes: 4 additions & 2 deletions Lib/inspect.py
Original file line number Diff line number Diff line change
Expand Up @@ -1829,8 +1829,10 @@ def getattr_static(obj, attr, default=_sentinel):
klass_result = _check_class(klass, attr)

if instance_result is not _sentinel and klass_result is not _sentinel:
if (_check_class(type(klass_result), '__get__') is not _sentinel and
_check_class(type(klass_result), '__set__') is not _sentinel):
if _check_class(type(klass_result), "__get__") is not _sentinel and (
_check_class(type(klass_result), "__set__") is not _sentinel
or _check_class(type(klass_result), "__delete__") is not _sentinel
):
return klass_result

if instance_result is not _sentinel:
Expand Down
3 changes: 3 additions & 0 deletions Lib/test/test_inspect.py
Original file line number Diff line number Diff line change
Expand Up @@ -1993,6 +1993,9 @@ class Foo(object):
descriptor.__set__ = lambda s, i, v: None
self.assertEqual(inspect.getattr_static(foo, 'd'), Foo.__dict__['d'])

del descriptor.__set__
descriptor.__delete__ = lambda s, i, o: None
self.assertEqual(inspect.getattr_static(foo, 'd'), Foo.__dict__['d'])

def test_metaclass_with_descriptor(self):
class descriptor(object):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix data descriptor detection in :func:`inspect.getattr_static`.

0 comments on commit f748fc9

Please sign in to comment.