Skip to content

Commit 5ba5ce4

Browse files
gh-102558: [Enum] better handling of non-Enum EnumType classes (GH-103060)
(cherry picked from commit f4ed2c6) Co-authored-by: Ethan Furman <[email protected]>
1 parent 13df5d3 commit 5ba5ce4

File tree

2 files changed

+5
-8
lines changed

2 files changed

+5
-8
lines changed

Lib/enum.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -936,7 +936,7 @@ def _convert_(cls, name, module, filter, source=None, *, boundary=None, as_globa
936936
def _check_for_existing_members_(mcls, class_name, bases):
937937
for chain in bases:
938938
for base in chain.__mro__:
939-
if issubclass(base, Enum) and base._member_names_:
939+
if isinstance(base, EnumType) and base._member_names_:
940940
raise TypeError(
941941
"<enum %r> cannot extend %r"
942942
% (class_name, base)
@@ -958,7 +958,7 @@ def _get_mixins_(mcls, class_name, bases):
958958
# ensure final parent class is an Enum derivative, find any concrete
959959
# data type, and check that Enum has no members
960960
first_enum = bases[-1]
961-
if not issubclass(first_enum, Enum):
961+
if not isinstance(first_enum, EnumType):
962962
raise TypeError("new enumerations should be created as "
963963
"`EnumName([mixin_type, ...] [data_type,] enum_type)`")
964964
member_type = mcls._find_data_type_(class_name, bases) or object
@@ -970,7 +970,7 @@ def _find_data_repr_(mcls, class_name, bases):
970970
for base in chain.__mro__:
971971
if base is object:
972972
continue
973-
elif issubclass(base, Enum):
973+
elif isinstance(base, EnumType):
974974
# if we hit an Enum, use it's _value_repr_
975975
return base._value_repr_
976976
elif '__repr__' in base.__dict__:
@@ -988,12 +988,12 @@ def _find_data_type_(mcls, class_name, bases):
988988
base_chain.add(base)
989989
if base is object:
990990
continue
991-
elif issubclass(base, Enum):
991+
elif isinstance(base, EnumType):
992992
if base._member_type_ is not object:
993993
data_types.add(base._member_type_)
994994
break
995995
elif '__new__' in base.__dict__ or '__init__' in base.__dict__:
996-
if issubclass(base, Enum):
996+
if isinstance(base, EnumType):
997997
continue
998998
data_types.add(candidate or base)
999999
break
@@ -1187,8 +1187,6 @@ def _missing_(cls, value):
11871187
return None
11881188

11891189
def __repr__(self):
1190-
if not isinstance(self, Enum):
1191-
return repr(self)
11921190
v_repr = self.__class__._value_repr_ or repr
11931191
return "<%s.%s: %s>" % (self.__class__.__name__, self._name_, v_repr(self._value_))
11941192

Lib/test/test_enum.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1321,7 +1321,6 @@ def repr(self):
13211321
class Huh(MyStr, MyInt, Enum):
13221322
One = 1
13231323

1324-
13251324
def test_pickle_enum(self):
13261325
if isinstance(Stooges, Exception):
13271326
raise Stooges

0 commit comments

Comments
 (0)