Enum `_ignore_`'d names and private names are treated like normal members
Aperta
Nessuno ha ancora preso questa issue.
bug
topic-enum
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
Bug Report
To Reproduce
from enum import Enum
from typing import TYPE_CHECKING
class Foo(Enum):
__str__ = lambda self: "blah"
_ignore_ = ["ignored"]
ignored = lambda _: "blah"
_Foo__private = lambda _: "blah"
print(Foo.__members__) # {}
print(Foo.__str__) # <function Foo.<lambda> at 0x...>
if TYPE_CHECKING:
reveal_type(Foo.__str__) # note: Revealed type is "def () -> builtins.str" ✅
print(hasattr(Foo, "_ignore_")) # False
if TYPE_CHECKING:
reveal_type(Foo._ignore_) # error: "type[Foo]" has no attribute "_ignore_" [attr-defined] ✅
print(hasattr(Foo, "ignored")) # False
if TYPE_CHECKING:
reveal_type(Foo.ignored) # note: Revealed type is "Literal[__main__.Foo.ignored]?" ❌
print(Foo._Foo__private) # <function Foo.<lambda> at 0x...>
if TYPE_CHECKING:
reveal_type(Foo._Foo__private) # note: Revealed type is "Literal[__main__.Foo._Foo__private]?" ❌
https://mypy-play.net/?mypy=latest&python=3.13&gist=ea296898a9c0e29c550b6154fb2cb594
Actual Behavior
main.py:16: note: Revealed type is "def () -> builtins.str"
main.py:20: error: "type[Foo]" has no attribute "_ignore_" [attr-defined]
main.py:20: note: Revealed type is "Any"
main.py:24: note: Revealed type is "Literal[__main__.Foo.ignored]?"
main.py:28: note: Revealed type is "Literal[__main__.Foo._Foo__private]?"
Found 1 error in 1 file (checked 1 source file)
Your Environment
- Mypy version used: 1.14.1
- Python version used: 3.13
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Riproduci l’esempio con mypy 1.14.1 su Python 3.13, concentrandoti sulla gestione di str, ignore, ignored e del membro privato il cui nome usa il name mangling da parte di Enum. Traccia il percorso del controllo dei tipi che classifica gli attributi di Enum e aggiungi una copertura di regressione affinché i nomi ignorati e privati non vengano trattati come membri normali.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- devtools
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 45/100