mirror of https://github.com/python/cpython
bpo-38026: fix inspect.getattr_static (GH-15676)
It should avoid dynamic lookup including `isinstance`. This is a regression caused by GH-5351.
This commit is contained in:
parent
2cd9025858
commit
8f9cc8771f
|
@ -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
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Fixed :func:`inspect.getattr_static` used ``isinstance`` while it should
|
||||
avoid dynamic lookup.
|
Loading…
Reference in New Issue