]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-103193: Speedup and inline `inspect._is_type` (#103321)
authorAlex Waygood <Alex.Waygood@Gmail.com>
Thu, 6 Apr 2023 20:49:24 +0000 (21:49 +0100)
committerGitHub <noreply@github.com>
Thu, 6 Apr 2023 20:49:24 +0000 (21:49 +0100)
Improve performance of `inspect.getattr_static`

Lib/inspect.py

index a317f0ca74884fa4f2448138f2ee654bde2af624..4242b40c2a08dfb336828c342723caea52df7ed8 100644 (file)
@@ -1791,13 +1791,6 @@ def _check_class(klass, attr):
             return entry.__dict__[attr]
     return _sentinel
 
-def _is_type(obj):
-    try:
-        _static_getmro(obj)
-    except TypeError:
-        return False
-    return True
-
 def _shadowed_dict(klass):
     for entry in _static_getmro(klass):
         dunder_dict = _get_dunder_dict_of_class(entry)
@@ -1821,8 +1814,10 @@ def getattr_static(obj, attr, default=_sentinel):
        documentation for details.
     """
     instance_result = _sentinel
-    if not _is_type(obj):
-        klass = type(obj)
+
+    objtype = type(obj)
+    if type not in _static_getmro(objtype):
+        klass = objtype
         dict_attr = _shadowed_dict(klass)
         if (dict_attr is _sentinel or
             type(dict_attr) is types.MemberDescriptorType):