Skip to content

Commit e81c2ea

Browse files
committed
gh-115539: Allow enum.Flag to have None members
1 parent 6cd18c7 commit e81c2ea

2 files changed

Lines changed: 13 additions & 3 deletions

File tree

Lib/enum.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -279,9 +279,10 @@ def __set_name__(self, enum_class, member_name):
279279
enum_member._sort_order_ = len(enum_class._member_names_)
280280

281281
if Flag is not None and issubclass(enum_class, Flag):
282-
enum_class._flag_mask_ |= value
283-
if _is_single_bit(value):
284-
enum_class._singles_mask_ |= value
282+
if isinstance(value, int):
283+
enum_class._flag_mask_ |= value
284+
if _is_single_bit(value):
285+
enum_class._singles_mask_ |= value
285286
enum_class._all_bits_ = 2 ** ((enum_class._flag_mask_).bit_length()) - 1
286287

287288
# If another member with the same value was already defined, the
@@ -309,6 +310,7 @@ def __set_name__(self, enum_class, member_name):
309310
elif (
310311
Flag is not None
311312
and issubclass(enum_class, Flag)
313+
and isinstance(value, int)
312314
and _is_single_bit(value)
313315
):
314316
# no other instances found, record this member in _member_names_

Lib/test/test_enum.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,6 +1047,14 @@ class TestPlainEnumFunction(_EnumTests, _PlainOutputTests, unittest.TestCase):
10471047

10481048
class TestPlainFlagClass(_EnumTests, _PlainOutputTests, _FlagTests, unittest.TestCase):
10491049
enum_type = Flag
1050+
1051+
def test_none_member(self):
1052+
class FlagWithNoneMember(Flag):
1053+
A = 1
1054+
E = None
1055+
1056+
self.assertEqual(FlagWithNoneMember.A.value, 1)
1057+
self.assertIs(FlagWithNoneMember.E.value, None)
10501058

10511059

10521060
class TestPlainFlagFunction(_EnumTests, _PlainOutputTests, _FlagTests, unittest.TestCase):

0 commit comments

Comments
 (0)