8000 bpo-46242: [Enum] better error message for extending `Enum` with memb… · python/cpython@e674e48 · GitHub
[go: up one dir, main page]

Skip to content

Commit e674e48

Browse files
authored
bpo-46242: [Enum] better error message for extending Enum with members (GH-30357)
1 parent 2402f1e commit e674e48

File tree

3 files changed

+7
-5
lines changed

3 files changed

+7
-5
lines changed

Lib/enum.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -763,7 +763,7 @@ def _create_(cls, class_name, names, *, module=None, qualname=None, type=None, s
763763
"""
764764
metacls = cls.__class__
765765
bases = (cls, ) if type is None else (type, cls)
766-
_, first_enum = cls._get_mixins_(cls, bases)
766+
_, first_enum = cls._get_mixins_(class_name, bases)
767767
classdict = metacls.__prepare__(class_name, bases)
768768

769769
# special processing needed for names?
@@ -848,8 +848,8 @@ def _check_for_existing_members(class_name, bases):
848848
% (class_name, base.__name__)
849849
)
850850

851-
@staticmethod
852-
def _get_mixins_(class_name, bases):
851+
@classmethod
852+
def _get_mixins_(cls, class_name, bases):
853853
"""
854854
Returns the type for creating enum members, and the first inherited
855855
enum class.
@@ -890,9 +890,8 @@ def _find_data_type(bases):
890890
if not issubclass(first_enum, Enum):
891891
raise TypeError("new enumerations should be created as "
892892
"`EnumName([mixin_type, ...] [data_type,] enum_type)`")
893+
cls._check_for_existing_members(class_name, bases)
893894
member_type = _find_data_type(bases) or object
894-
if first_enum._member_names_:
895-
raise TypeError("Cannot extend enumerations")
896895
return member_type, first_enum
897896

898897
@staticmethod

Lib/test/test_enum.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1433,6 +1433,8 @@ class MoreColor(Color):
14331433
with self.assertRaisesRegex(TypeError, "EvenMoreColor: cannot extend enumeration 'Color'"):
14341434
class EvenMoreColor(Color, IntEnum):
14351435
chartruese = 7
1436+
with self.assertRaisesRegex(TypeError, "Foo: cannot extend enumeration 'Color'"):
1437+
Color('Foo', ('pink', 'black'))
14361438

14371439
def test_exclude_methods(self):
14381440
class whatever(Enum):
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Improve error message when creating a new :class:`enum.Enum` type subclassing an existing ``Enum`` with ``_member_names_`` using :meth:`enum.Enum.__call__`.

0 commit comments

Comments
 (0)
0