Skip to content

Commit f4ed2c6

Browse files
authored
gh-102558: [Enum] better handling of non-Enum EnumType classes (GH-103060)
1 parent b838d80 commit f4ed2c6

File tree

2 files changed

+5
-8
lines changed

2 files changed

+5
-8
lines changed

Lib/enum.py

+5-7
Original file line numberDiff line numberDiff line change
@@ -928,7 +928,7 @@ def _convert_(cls, name, module, filter, source=None, *, boundary=None, as_globa
928928
def _check_for_existing_members_(mcls, class_name, bases):
929929
for chain in bases:
930930
for base in chain.__mro__:
931-
if issubclass(base, Enum) and base._member_names_:
931+
if isinstance(base, EnumType) and base._member_names_:
932932
raise TypeError(
933933
"<enum %r> cannot extend %r"
934934
% (class_name, base)
@@ -947,7 +947,7 @@ def _get_mixins_(mcls, class_name, bases):
947947
# ensure final parent class is an Enum derivative, find any concrete
948948
# data type, and check that Enum has no members
949949
first_enum = bases[-1]
950-
if not issubclass(first_enum, Enum):
950+
if not isinstance(first_enum, EnumType):
951951
raise TypeError("new enumerations should be created as "
952952
"`EnumName([mixin_type, ...] [data_type,] enum_type)`")
953953
member_type = mcls._find_data_type_(class_name, bases) or object
@@ -959,7 +959,7 @@ def _find_data_repr_(mcls, class_name, bases):
959959
for base in chain.__mro__:
960960
if base is object:
961961
continue
962-
elif issubclass(base, Enum):
962+
elif isinstance(base, EnumType):
963963
# if we hit an Enum, use it's _value_repr_
964964
return base._value_repr_
965965
elif '__repr__' in base.__dict__:
@@ -985,12 +985,12 @@ def _find_data_type_(mcls, class_name, bases):
985985
base_chain.add(base)
986986
if base is object:
987987
continue
988-
elif issubclass(base, Enum):
988+
elif isinstance(base, EnumType):
989989
if base._member_type_ is not object:
990990
data_types.add(base._member_type_)
991991
break
992992
elif '__new__' in base.__dict__ or '__init__' in base.__dict__:
993-
if issubclass(base, Enum):
993+
if isinstance(base, EnumType):
994994
continue
995995
data_types.add(candidate or base)
996996
break
@@ -1191,8 +1191,6 @@ def _missing_(cls, value):
11911191
return None
11921192

11931193
def __repr__(self):
1194-
if not isinstance(self, Enum):
1195-
return repr(self)
11961194
v_repr = self.__class__._value_repr_ or repr
11971195
return "<%s.%s: %s>" % (self.__class__.__name__, self._name_, v_repr(self._value_))
11981196

Lib/test/test_enum.py

-1
Original file line numberDiff line numberDiff line change
@@ -1386,7 +1386,6 @@ def repr(self):
13861386
class Huh(MyStr, MyInt, Enum):
13871387
One = 1
13881388

1389-
13901389
def test_pickle_enum(self):
13911390
if isinstance(Stooges, Exception):
13921391
raise Stooges

0 commit comments

Comments
 (0)