From 60b9735538f1bd741d939ae57aa7da6dddcec5dd Mon Sep 17 00:00:00 2001 From: Emmanuel Ferdman Date: Fri, 13 Feb 2026 20:27:14 +0200 Subject: [PATCH] Fix false positive for enum members shadowing base properties Signed-off-by: Emmanuel Ferdman --- mypy/checker.py | 8 ++++++++ test-data/unit/check-enum.test | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/mypy/checker.py b/mypy/checker.py index 2cb3d69b2d770..1560e0aea8a26 100644 --- a/mypy/checker.py +++ b/mypy/checker.py @@ -3711,6 +3711,14 @@ def check_compatibility_all_supers(self, lvalue: RefExpr, rvalue: Expression) -> if is_private(lvalue_node.name): continue + # Enum members "name"/"value" shadow properties, not overrides. + if ( + lvalue_node.info.is_enum + and lvalue_node.name in ("name", "value") + and base.fullname in ENUM_BASES + ): + continue + base_type, base_node = self.node_type_from_base(lvalue_node.name, base, lvalue) # TODO: if the r.h.s. is a descriptor, we should check setter override as well. custom_setter = is_custom_settable_property(base_node) diff --git a/test-data/unit/check-enum.test b/test-data/unit/check-enum.test index 55a20e2b3fa2c..891572a4db427 100644 --- a/test-data/unit/check-enum.test +++ b/test-data/unit/check-enum.test @@ -2982,3 +2982,22 @@ def f(x: SE | None) -> None: else: reveal_type(x) # N: Revealed type is "__main__.SE | None" [builtins fixtures/primitives.pyi] + +[case testEnumMemberNamedValueWithAuto] +from enum import Enum, auto + +class A(Enum): + value = auto() + +class B(Enum): + name = auto() + +class C(Enum): + name = auto() + value = auto() + +reveal_type(A.value) # N: Revealed type is "Literal[__main__.A.value]?" +reveal_type(B.name) # N: Revealed type is "Literal[__main__.B.name]?" +reveal_type(C.name) # N: Revealed type is "Literal[__main__.C.name]?" +reveal_type(C.value) # N: Revealed type is "Literal[__main__.C.value]?" +[builtins fixtures/primitives.pyi]