gh-93910: [Enum] restore member.member restriction while keeping performance boost (GH-94913)

(cherry picked from commit c20186c397)

Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
This commit is contained in:
Miss Islington (bot) 2022-07-16 21:53:41 -07:00 committed by GitHub
parent 5a34287b5d
commit 30f28ac296
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 1 deletions

View file

@ -1114,6 +1114,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.