FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Close #18545: now only executes member_type if no _value_ is assigned… · python/cpython@b41803e · GitHub

Repository navigation

Commit b41803e

Browse files
committed
Close #18545: now only executes member_type if no _value_ is assigned in __new__.
1 parent 4d35e75 commit b41803e

2 files changed

Lines changed: 20 additions & 4 deletions

File tree

‎Lib/enum.py‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,12 +152,12 @@ def __new__(metacls, cls, bases, classdict):
152152
args = (args, ) # wrap it one more time
153153
if not use_args:
154154
enum_member = __new__(enum_class)
155-
original_value = value
155+
if not hasattr(enum_member, '_value_'):
156+
enum_member._value_ = value
156157
else:
157158
enum_member = __new__(enum_class, *args)
158-
original_value = member_type(*args)
159-
if not hasattr(enum_member, '_value_'):
160-
enum_member._value_ = original_value
159+
if not hasattr(enum_member, '_value_'):
160+
enum_member._value_ = member_type(*args)
161161
value = enum_member._value_
162162
enum_member._member_type_ = member_type
163163
enum_member._name_ = member_name

‎Lib/test/test_enum.py‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -934,6 +934,22 @@ class ColorInAList(AutoNumberInAList):
934934
self.assertEqual(ColorInAList.red.value, [1])
935935
self.assertEqual(ColorInAList([1]), ColorInAList.red)
936936

937+
def test_conflicting_types_resolved_in_new(self):
938+
class LabelledIntEnum(int, Enum):
939+
def __new__(cls, *args):
940+
value, label = args
941+
obj = int.__new__(cls, value)
942+
obj.label = label
943+
obj._value_ = value
944+
return obj
945+
946+
class LabelledList(LabelledIntEnum):
947+
unprocessed = (1, "Unprocessed")
948+
payment_complete = (2, "Payment Complete")
949+
950+
self.assertEqual(list(LabelledList), [LabelledList.unprocessed, LabelledList.payment_complete])
951+
self.assertEqual(LabelledList.unprocessed, 1)
952+
self.assertEqual(LabelledList(1), LabelledList.unprocessed)
937953

938954

939955
class TestUnique(unittest.TestCase):

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL