summaryrefslogtreecommitdiffstats
path: root/Lib/enum.py
diff options
context:
space:
mode:
authorEthan Furman <ethan@stoneleaf.us>2022-07-17 01:13:57 (GMT)
committerGitHub <noreply@github.com>2022-07-17 01:13:57 (GMT)
commitc20186c3972ff38577c4c5e32ca86748210983d2 (patch)
tree75b3d7b4d3a5ff436d43c937bbd2bae96d5254e5 /Lib/enum.py
parent6da988a46c8955755624ad9878288d5214fceb4e (diff)
downloadcpython-c20186c3972ff38577c4c5e32ca86748210983d2.zip
cpython-c20186c3972ff38577c4c5e32ca86748210983d2.tar.gz
cpython-c20186c3972ff38577c4c5e32ca86748210983d2.tar.bz2
gh-93910: [Enum] restore member.member restriction while keeping performance boost (GH-94913)
Diffstat (limited to 'Lib/enum.py')
-rw-r--r--Lib/enum.py8
1 files changed, 8 insertions, 0 deletions
diff --git a/Lib/enum.py b/Lib/enum.py
index 652878c..a4f1f09 100644
--- a/Lib/enum.py
+++ b/Lib/enum.py
@@ -1101,6 +1101,14 @@ class Enum(metaclass=EnumType):
def __init__(self, *args, **kwds):
pass
+ def __getattribute__(self, name):
+ self_dict = super().__getattribute__('__dict__')
+ cls = super().__getattribute__('__class__')
+ value = super().__getattribute__(name)
+ if isinstance(value, cls) and name not in self_dict and name in self._member_names_:
+ raise AttributeError("<enum '%s'> member has no attribute %r" % (cls.__name__, name))
+ return super().__getattribute__(name)
+
def _generate_next_value_(name, start, count, last_values):
"""
Generate the next value when not given.