summaryrefslogtreecommitdiffstats
path: root/Python/structmember.c
diff options
context:
space:
mode:
authorAlex Waygood <Alex.Waygood@Gmail.com>2024-01-05 01:51:17 (GMT)
committerGitHub <noreply@github.com>2024-01-05 01:51:17 (GMT)
commit8435fbfe4e1adb77ef6652bdcbd473b473a08ba3 (patch)
treef80937770b2b1398029ebd1f7efadcb76a287199 /Python/structmember.c
parent6f90399c23783a5b51be194b02d30d7908d6afc2 (diff)
downloadcpython-8435fbfe4e1adb77ef6652bdcbd473b473a08ba3.zip
cpython-8435fbfe4e1adb77ef6652bdcbd473b473a08ba3.tar.gz
cpython-8435fbfe4e1adb77ef6652bdcbd473b473a08ba3.tar.bz2
[3.12] gh-113320: Reduce the number of dangerous `getattr()` calls when constructing protocol classes (#113401) (#113722)
- Only attempt to figure out whether protocol members are "method members" or not if the class is marked as a runtime protocol. This information is irrelevant for non-runtime protocols; we can safely skip the risky introspection for them. - Only do the risky getattr() calls in one place (the runtime_checkable class decorator), rather than in three places (_ProtocolMeta.__init__, _ProtocolMeta.__instancecheck__ and _ProtocolMeta.__subclasscheck__). This reduces the number of locations in typing.py where the risky introspection could go wrong. - For runtime protocols, if determining whether a protocol member is callable or not fails, give a better error message. I think it's reasonable for us to reject runtime protocols that have members which raise strange exceptions when you try to access them. PEP-544 clearly states that all protocol member must be callable for issubclass() calls against the protocol to be valid -- and if a member raises when we try to access it, there's no way for us to figure out whether it's a callable member or not! (cherry-picked from commit ed6ea3ea79)
Diffstat (limited to 'Python/structmember.c')
0 files changed, 0 insertions, 0 deletions