mirror of https://github.com/python/cpython
bpo-34909: keep searching mixins until base class is found (GH-9737)
This commit is contained in:
parent
92878829c3
commit
cd45385ffa
|
@ -486,7 +486,7 @@ class EnumMeta(type):
|
||||||
if base is object:
|
if base is object:
|
||||||
continue
|
continue
|
||||||
elif '__new__' in base.__dict__:
|
elif '__new__' in base.__dict__:
|
||||||
if issubclass(base, Enum) and not hasattr(base, '__new_member__'):
|
if issubclass(base, Enum):
|
||||||
continue
|
continue
|
||||||
return base
|
return base
|
||||||
|
|
||||||
|
@ -499,7 +499,6 @@ class EnumMeta(type):
|
||||||
member_type = _find_data_type(bases) or object
|
member_type = _find_data_type(bases) or object
|
||||||
if first_enum._member_names_:
|
if first_enum._member_names_:
|
||||||
raise TypeError("Cannot extend enumerations")
|
raise TypeError("Cannot extend enumerations")
|
||||||
|
|
||||||
return member_type, first_enum
|
return member_type, first_enum
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -545,7 +544,6 @@ class EnumMeta(type):
|
||||||
use_args = False
|
use_args = False
|
||||||
else:
|
else:
|
||||||
use_args = True
|
use_args = True
|
||||||
|
|
||||||
return __new__, save_new, use_args
|
return __new__, save_new, use_args
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1842,6 +1842,27 @@ class TestEnum(unittest.TestCase):
|
||||||
self.assertEqual(ConfusedColor.RED.social(), "what's up?")
|
self.assertEqual(ConfusedColor.RED.social(), "what's up?")
|
||||||
self.assertTrue(issubclass(ReformedColor, int))
|
self.assertTrue(issubclass(ReformedColor, int))
|
||||||
|
|
||||||
|
def test_multiple_inherited_mixin(self):
|
||||||
|
class StrEnum(str, Enum):
|
||||||
|
def __new__(cls, *args, **kwargs):
|
||||||
|
for a in args:
|
||||||
|
if not isinstance(a, str):
|
||||||
|
raise TypeError("Enumeration '%s' (%s) is not"
|
||||||
|
" a string" % (a, type(a).__name__))
|
||||||
|
return str.__new__(cls, *args, **kwargs)
|
||||||
|
@unique
|
||||||
|
class Decision1(StrEnum):
|
||||||
|
REVERT = "REVERT"
|
||||||
|
REVERT_ALL = "REVERT_ALL"
|
||||||
|
RETRY = "RETRY"
|
||||||
|
class MyEnum(StrEnum):
|
||||||
|
pass
|
||||||
|
@unique
|
||||||
|
class Decision2(MyEnum):
|
||||||
|
REVERT = "REVERT"
|
||||||
|
REVERT_ALL = "REVERT_ALL"
|
||||||
|
RETRY = "RETRY"
|
||||||
|
|
||||||
|
|
||||||
class TestOrder(unittest.TestCase):
|
class TestOrder(unittest.TestCase):
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue