diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/enum.py | 17 | ||||
-rw-r--r-- | Lib/test/test_enum.py | 1 |
2 files changed, 10 insertions, 8 deletions
diff --git a/Lib/enum.py b/Lib/enum.py index 69216c9..652878c 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -309,16 +309,17 @@ class _proto_member: if descriptor and not need_override: # previous enum.property found, no further action needed pass - else: + elif descriptor and need_override: redirect = property() redirect.__set_name__(enum_class, member_name) - if descriptor and need_override: - # previous enum.property found, but some other inherited attribute - # is in the way; copy fget, fset, fdel to this one - redirect.fget = descriptor.fget - redirect.fset = descriptor.fset - redirect.fdel = descriptor.fdel + # Previous enum.property found, but some other inherited attribute + # is in the way; copy fget, fset, fdel to this one. + redirect.fget = descriptor.fget + redirect.fset = descriptor.fset + redirect.fdel = descriptor.fdel setattr(enum_class, member_name, redirect) + else: + setattr(enum_class, member_name, enum_member) # now add to _member_map_ (even aliases) enum_class._member_map_[member_name] = enum_member try: @@ -647,7 +648,7 @@ class EnumType(type): 'member order does not match _order_:\n %r\n %r' % (enum_class._member_names_, _order_) ) - # + return enum_class def __bool__(cls): diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index a263509..aec18c7 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -2646,6 +2646,7 @@ class TestSpecial(unittest.TestCase): 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): |