Optimise inspect.getattr_static
· Issue #103193 · python/cpython (original) (raw)
Feature or enhancement
Following 6d59c9e, typing._ProtocolMeta.__instancecheck__
uses inspect.getattr_static
in a tight loop, where it had previously used hasattr
. This improves semantics in several highly desirable ways, but causes a considerable slowdown for _ProtocolMeta.__instancecheck__
, as inspect.getattr_static
is much slower than hasattr
.
The performance hit to _ProtocolMeta.__instancecheck__
has already been mostly mitigated through several typing
-specific optimisations that are tracked in this issue:
However, it would be good to also see if we can improve the performance of inspect.getattr_static
. This will not only improve the performance of isinstance()
checks against classes subclassing typing.Protocol
. It will also improve the performance of all other tools that use inspect.getattr_static
for introspection without side effects.
Linked PRs
- gh-103193: Micro-optimise helper functions for inspect.getattr_static #103195
- gh-103193: Use LBYL idioms rather than EAFP in inspect.getattr_static #103318
- gh-103193: Speedup and inline inspect._is_type #103321
- gh-103193: Celebrate performance improvements to inspect.getattr_static in 'What's New in Python 3.12' #103349
- gh-103193: cache calls to inspect._shadowed_dict in inspect.getattr_static #104267
- gh-103193: Improve getattr_static test coverage #104286
- [3.11] gh-103193: Improve getattr_static test coverage (GH-104286) #104290
- gh-103193: Fix refleaks in test_inspect and test_typing #104320