8000 fixup! fixup! Support overriding dunder attributes in Enum subclass · python/mypy@de303eb · GitHub
[go: up one dir, main page]

Skip to content

Commit de303eb

Browse files
committed
fixup! fixup! Support overriding dunder attributes in Enum subclass
1 parent be163fc commit de303eb

File tree

3 files changed

+4
-4
lines changed

3 files changed

+4
-4
lines changed

mypy/checker.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1901,7 +1901,7 @@ def check_enum(self, defn: ClassDef) -> None:
19011901
# `__members__` will always be overwritten by `Enum` and is considered
19021902
# read-only so we disallow assigning a value to it
19031903
self.fail(
1904-
message_registry.CANNOT_WRITE_ENUM_READONLY_MEMBERS, sym.node
1904+
message_registry.ENUM_MEMBERS_ATTR_WILL_BE_OVERRIDEN, sym.node
19051905
)
19061906
for base in defn.info.mro[1:-1]: # we don't need self and `object`
19071907
if base.is_enum and base.fullname not in ENUM_BASES:

mypy/message_registry.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,8 @@ def format(self, *args: object, **kwargs: object) -> "ErrorMessage":
205205
CANNOT_MAKE_DELETABLE_FINAL: Final = ErrorMessage("Deletable attribute cannot be final")
206206

207207
# Enum
208-
CANNOT_WRITE_ENUM_READONLY_MEMBERS: Final = ErrorMessage(
209-
'Cannot declare read-only attribute "__members__"'
208+
ENUM_MEMBERS_ATTR_WILL_BE_OVERRIDEN: Final = ErrorMessage(
209+
'Assigned "__members__" will be overriden by "Enum" internally'
210210
)
211211

212212
# ClassVar

test-data/unit/check-enum.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1923,7 +1923,7 @@ import typing
19231923
from enum import Enum
19241924

19251925
class WritingMembers(Enum):
1926-
__members__: typing.Dict[Enum, Enum] = {} # E: Cannot declare read-only attribute "__members__"
1926+
__members__: typing.Dict[Enum, Enum] = {} # E: Assigned "__members__" will be overriden by "Enum" internally
19271927

19281928
class OnlyAnnotatedMembers(Enum):
19291929
__members__: typing.Dict[Enum, Enum]

0 commit comments

Comments
 (0)
0