From 5af6b8df3a9a6d69ecc31c6c01d03cbbc202214d Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Thu, 2 Jun 2022 01:20:32 +0200 Subject: [PATCH] Init FigureCanvasAgg._lastKey at class-level. This avoids the need for getattr checks. We explicitly don't do the same for FigureCanvasAgg.renderer because 1) if _lastKey has been set to a non-None value, then renderer has also been set and 2) initing renderer to e.g. None would change the possible types of a public attribute. --- lib/matplotlib/backends/backend_agg.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/backends/backend_agg.py b/lib/matplotlib/backends/backend_agg.py index 8fd89c8ef78d..644961db111d 100644 --- a/lib/matplotlib/backends/backend_agg.py +++ b/lib/matplotlib/backends/backend_agg.py @@ -387,6 +387,8 @@ def post_processing(image, dpi): class FigureCanvasAgg(FigureCanvasBase): # docstring inherited + _lastKey = None # Overwritten per-instance on the first draw. + def copy_from_bbox(self, bbox): renderer = self.get_renderer() return renderer.copy_from_bbox(bbox) @@ -412,8 +414,7 @@ def draw(self): def get_renderer(self, cleared=False): w, h = self.figure.bbox.size key = w, h, self.figure.dpi - reuse_renderer = (hasattr(self, "renderer") - and getattr(self, "_lastKey", None) == key) + reuse_renderer = (self._lastKey == key) if not reuse_renderer: self.renderer = RendererAgg(w, h, self.figure.dpi) self._lastKey = key