diff options
author | Inada Naoki <songofacandy@gmail.com> | 2019-09-05 13:07:08 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-05 13:07:08 +0900 |
commit | 8f9cc8771ffb8d0e21be287eaed42ae06087acca (patch) | |
tree | a787ec3d18b375519f6812e6d4632cc18800828f | |
parent | 2cd902585815582eb059e3b40e014ebe4e7fdee7 (diff) | |
download | cpython-git-8f9cc8771ffb8d0e21be287eaed42ae06087acca.tar.gz |
bpo-38026: fix inspect.getattr_static (GH-15676)
It should avoid dynamic lookup including `isinstance`.
This is a regression caused by GH-5351.
-rw-r--r-- | Lib/inspect.py | 4 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2019-09-04-20-34-14.bpo-38026.0LLRX-.rst | 2 |
2 files changed, 4 insertions, 2 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py index 99a580bd2f..a616f2d49b 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -1558,7 +1558,7 @@ def _shadowed_dict(klass): except KeyError: pass else: - if not (isinstance(class_dict, types.GetSetDescriptorType) and + if not (type(class_dict) is types.GetSetDescriptorType and class_dict.__name__ == "__dict__" and class_dict.__objclass__ is entry): return class_dict @@ -1580,7 +1580,7 @@ def getattr_static(obj, attr, default=_sentinel): klass = type(obj) dict_attr = _shadowed_dict(klass) if (dict_attr is _sentinel or - isinstance(dict_attr, types.MemberDescriptorType)): + type(dict_attr) is types.MemberDescriptorType): instance_result = _check_instance(obj, attr) else: klass = obj diff --git a/Misc/NEWS.d/next/Library/2019-09-04-20-34-14.bpo-38026.0LLRX-.rst b/Misc/NEWS.d/next/Library/2019-09-04-20-34-14.bpo-38026.0LLRX-.rst new file mode 100644 index 0000000000..166cd86751 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-09-04-20-34-14.bpo-38026.0LLRX-.rst @@ -0,0 +1,2 @@ +Fixed :func:`inspect.getattr_static` used ``isinstance`` while it should +avoid dynamic lookup. |