From 62d4471896469658ef3143af49a0887c71d87a46 Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Wed, 5 Apr 2023 08:27:01 +0100 Subject: [PATCH] gh-103193: Micro-optimise helper functions for `inspect.getattr_static` (#103195) --- Lib/inspect.py | 7 +++---- .../Library/2023-04-02-17-51-08.gh-issue-103193.xrZbM1.rst | 2 ++ 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2023-04-02-17-51-08.gh-issue-103193.xrZbM1.rst diff --git a/Lib/inspect.py b/Lib/inspect.py index 0eceaaf9a24f5d..8739c9c2572643 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -1772,9 +1772,9 @@ def trace(context=1): # ------------------------------------------------ static version of getattr _sentinel = object() +_static_getmro = type.__dict__['__mro__'].__get__ +_get_dunder_dict_of_class = type.__dict__["__dict__"].__get__ -def _static_getmro(klass): - return type.__dict__['__mro__'].__get__(klass) def _check_instance(obj, attr): instance_dict = {} @@ -1802,10 +1802,9 @@ def _is_type(obj): return True def _shadowed_dict(klass): - dict_attr = type.__dict__["__dict__"] for entry in _static_getmro(klass): try: - class_dict = dict_attr.__get__(entry)["__dict__"] + class_dict = _get_dunder_dict_of_class(entry)["__dict__"] except KeyError: pass else: diff --git a/Misc/NEWS.d/next/Library/2023-04-02-17-51-08.gh-issue-103193.xrZbM1.rst b/Misc/NEWS.d/next/Library/2023-04-02-17-51-08.gh-issue-103193.xrZbM1.rst new file mode 100644 index 00000000000000..f0b76a605a5610 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-04-02-17-51-08.gh-issue-103193.xrZbM1.rst @@ -0,0 +1,2 @@ +Improve performance of :func:`inspect.getattr_static`. Patch by Alex +Waygood.