Skip to content

Commit 37440ee

Browse files
authored
bpo-41907: [Enum] fix format() behavior for IntFlag (GH-22497)
1 parent c168b50 commit 37440ee

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

Lib/enum.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -658,7 +658,7 @@ def __format__(self, format_spec):
658658
# the value
659659

660660
# pure Enum branch, or branch with __str__ explicitly overridden
661-
str_overridden = type(self).__str__ != Enum.__str__
661+
str_overridden = type(self).__str__ not in (Enum.__str__, Flag.__str__)
662662
if self._member_type_ is object or str_overridden:
663663
cls = str
664664
val = str(self)

Lib/test/test_enum.py

+14
Original file line numberDiff line numberDiff line change
@@ -585,12 +585,15 @@ def hello(self):
585585
class Test1Enum(MyMethodEnum, int, MyStrEnum):
586586
One = 1
587587
Two = 2
588+
self.assertTrue(Test1Enum._member_type_ is int)
588589
self.assertEqual(str(Test1Enum.One), 'MyStr')
590+
self.assertEqual(format(Test1Enum.One, ''), 'MyStr')
589591
#
590592
class Test2Enum(MyStrEnum, MyMethodEnum):
591593
One = 1
592594
Two = 2
593595
self.assertEqual(str(Test2Enum.One), 'MyStr')
596+
self.assertEqual(format(Test1Enum.One, ''), 'MyStr')
594597

595598
def test_inherited_data_type(self):
596599
class HexInt(int):
@@ -2251,6 +2254,11 @@ def test_repr(self):
22512254
self.assertEqual(repr(~(Open.RO | Open.CE)), '<Open.AC: 3>')
22522255
self.assertEqual(repr(~(Open.WO | Open.CE)), '<Open.RW: 2>')
22532256

2257+
def test_format(self):
2258+
Perm = self.Perm
2259+
self.assertEqual(format(Perm.R, ''), 'Perm.R')
2260+
self.assertEqual(format(Perm.R | Perm.X, ''), 'Perm.R|X')
2261+
22542262
def test_or(self):
22552263
Perm = self.Perm
22562264
for i in Perm:
@@ -2590,6 +2598,7 @@ class Color(IntFlag):
25902598

25912599
def test_type(self):
25922600
Perm = self.Perm
2601+
self.assertTrue(Perm._member_type_ is int)
25932602
Open = self.Open
25942603
for f in Perm:
25952604
self.assertTrue(isinstance(f, Perm))
@@ -2669,6 +2678,11 @@ def test_repr(self):
26692678
self.assertEqual(repr(~(Open.WO | Open.CE)), '<Open.RW: -524290>')
26702679
self.assertEqual(repr(Open(~4)), '<Open.CE|AC|RW|WO: -5>')
26712680

2681+
def test_format(self):
2682+
Perm = self.Perm
2683+
self.assertEqual(format(Perm.R, ''), '4')
2684+
self.assertEqual(format(Perm.R | Perm.X, ''), '5')
2685+
26722686
def test_or(self):
26732687
Perm = self.Perm
26742688
for i in Perm:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
fix `format()` behavior for `IntFlag`

0 commit comments

Comments
 (0)