[Python-checkins] Revert "gh-93910: [Enum] restore member.member restriction while keeping performance boost (GH-94913)" (#94981)

gpshead webhook-mailer at python.org
Mon Jul 18 16:56:43 EDT 2022


https://github.com/python/cpython/commit/be84daf52aec7b963a743d0c2d66dbd175810803
commit: be84daf52aec7b963a743d0c2d66dbd175810803
branch: 3.11
author: Ethan Furman <ethan at stoneleaf.us>
committer: gpshead <greg at krypto.org>
date: 2022-07-18T13:56:21-07:00
summary:

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

This reverts commit 30f28ac296e506b336e0ab56c41422a53c36d0c2.

files:
M Lib/enum.py
M Lib/test/test_enum.py

diff --git a/Lib/enum.py b/Lib/enum.py
index f5c29edffcf9f..63ca1605353a7 100644
--- a/Lib/enum.py
+++ b/Lib/enum.py
@@ -1125,14 +1125,6 @@ def __new__(cls, value):
     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.
diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py
index 80834f2529ae9..4a42c73817210 100644
--- a/Lib/test/test_enum.py
+++ b/Lib/test/test_enum.py
@@ -2611,6 +2611,7 @@ class Private(Enum):
         self.assertEqual(Private._Private__corporal, 'Radar')
         self.assertEqual(Private._Private__major_, 'Hoolihan')
 
+    @unittest.skip("Accessing all values retained for performance reasons, see GH-93910")
     def test_exception_for_member_from_member_access(self):
         with self.assertRaisesRegex(AttributeError, "<enum .Di.> member has no attribute .NO."):
             class Di(Enum):
@@ -2618,12 +2619,6 @@ class Di(Enum):
                 NO = 0
             nope = Di.YES.NO
 
-    def test_no_exception_for_overridden_member_from_member_access(self):
-        class Di(Enum):
-            YES = 1
-            NO = 0
-        Di.YES.NO = Di.NO
-        nope = Di.YES.NO
 
     def test_dynamic_members_with_static_methods(self):
         #



More information about the Python-checkins mailing list