]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-44342: [Enum] fix data type search (GH-26667)
authorEthan Furman <ethan@stoneleaf.us>
Fri, 11 Jun 2021 08:25:14 +0000 (01:25 -0700)
committerGitHub <noreply@github.com>
Fri, 11 Jun 2021 08:25:14 +0000 (01:25 -0700)
In an inheritance chain of

  int -> my_int -> final_int

the data type is now final_int (not my_int)

Lib/enum.py
Lib/test/test_enum.py

index 5263e510d59361880a22919d7460eccbb898f7c5..5548130be34d47c9add35cbd1499f27f91efad25 100644 (file)
@@ -818,7 +818,7 @@ class EnumType(type):
                         data_types.add(candidate or base)
                         break
                     else:
-                        candidate = base
+                        candidate = candidate or base
             if len(data_types) > 1:
                 raise TypeError('%r: too many data types: %r' % (class_name, data_types))
             elif data_types:
index 9a7882b8a9c6fef1d22c8d70db1dbeeb6c05cd98..22a829d10204186a6afa36edfcbc64bf092202bc 100644 (file)
@@ -658,6 +658,14 @@ class TestEnum(unittest.TestCase):
             def __repr__(self):
                 return '<%s.%s: %r>' % (self.__class__.__name__, self._name_, self._value_)
         self.assertEqual(repr(MyEnum.A), '<MyEnum.A: 0x1>')
+        #
+        class SillyInt(HexInt):
+            pass
+        class MyOtherEnum(SillyInt, enum.Enum):
+            D = 4
+            E = 5
+            F = 6
+        self.assertIs(MyOtherEnum._member_type_, SillyInt)
 
     def test_too_many_data_types(self):
         with self.assertRaisesRegex(TypeError, 'too many data types'):