mirror of
https://github.com/python/cpython.git
synced 2025-08-30 21:48:47 +00:00
bpo-43945: [Enum] Deprecate non-standard mixin format() behavior (GH-25649)
In 3.12 the enum member, not the member's value, will be used for format() calls. Format specifiers can be used to retain the current display of enum members: Example enumeration: class Color(IntEnum): RED = 1 GREEN = 2 BLUE = 3 Current behavior: f'{Color.RED}' --> '1' Future behavior: f'{Color.RED}' --> 'RED' Using d specifier: f'{Color.RED:d}' --> '1' Using specifiers can be done now and is future-compatible.
This commit is contained in:
parent
cfe523b492
commit
5987b8c463
3 changed files with 18 additions and 0 deletions
|
@ -1005,6 +1005,14 @@ class Enum(metaclass=EnumType):
|
|||
val = str(self)
|
||||
# mix-in branch
|
||||
else:
|
||||
import warnings
|
||||
warnings.warn(
|
||||
"in 3.12 format() will use the enum member, not the enum member's value;\n"
|
||||
"use a format specifier, such as :d for an IntEnum member, to maintain"
|
||||
"the current display",
|
||||
DeprecationWarning,
|
||||
stacklevel=2,
|
||||
)
|
||||
cls = self._member_type_
|
||||
val = self._value_
|
||||
return cls.__format__(val, format_spec)
|
||||
|
|
|
@ -528,6 +528,14 @@ class TestEnum(unittest.TestCase):
|
|||
self.assertEqual(str(TestFloat.one), 'one')
|
||||
self.assertEqual('{}'.format(TestFloat.one), 'TestFloat success!')
|
||||
|
||||
@unittest.skipUnless(
|
||||
sys.version_info[:2] < (3, 12),
|
||||
'mixin-format now uses member instead of member.value',
|
||||
)
|
||||
def test_mixin_format_warning(self):
|
||||
with self.assertWarns(DeprecationWarning):
|
||||
self.assertEqual(f'{self.Grades.B}', '4')
|
||||
|
||||
def assertFormatIsValue(self, spec, member):
|
||||
self.assertEqual(spec.format(member), spec.format(member.value))
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
[Enum] Deprecate non-standard mixin format() behavior: in 3.12 the enum
|
||||
member, not the member's value, will be used for format() calls.
|
Loading…
Add table
Add a link
Reference in a new issue