bpo-44342: [Enum] fix data type search (GH-26667)

In an inheritance chain of

  int -> my_int -> final_int

the data type is now final_int (not my_int)
(cherry picked from commit 3a7cccfd6c)

Co-authored-by: Ethan Furman <ethan@stoneleaf.us>

Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
This commit is contained in:
Miss Islington (bot) 2021-06-15 14:07:37 -07:00 committed by GitHub
parent 8d0b2ca493
commit 0f99324f61
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 1 deletions

View file

@ -823,7 +823,7 @@ class EnumType(type):
data_types.add(candidate or base) data_types.add(candidate or base)
break break
else: else:
candidate = base candidate = candidate or base
if len(data_types) > 1: if len(data_types) > 1:
raise TypeError('%r: too many data types: %r' % (class_name, data_types)) raise TypeError('%r: too many data types: %r' % (class_name, data_types))
elif data_types: elif data_types:

View file

@ -658,6 +658,14 @@ class TestEnum(unittest.TestCase):
def __repr__(self): def __repr__(self):
return '<%s.%s: %r>' % (self.__class__.__name__, self._name_, self._value_) return '<%s.%s: %r>' % (self.__class__.__name__, self._name_, self._value_)
self.assertEqual(repr(MyEnum.A), '<MyEnum.A: 0x1>') 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): def test_too_many_data_types(self):
with self.assertRaisesRegex(TypeError, 'too many data types'): with self.assertRaisesRegex(TypeError, 'too many data types'):