Enum .name property has str type
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
I stumbled across a weird issue with literals and using the .name property with enums. I was wondering if this is expected behavior. Seems inconsistent to me.
To Reproduce
from enum import Enum
from typing import Literal
class Foo(Enum):
A = 1
B = 1
keys = Literal["A", "B", "C"]
def f(name: keys) -> None:
print(name)
foo: Foo = Foo.A
f(foo.name) # Error: Argument 1 to "f" has incompatible type "str"; expected "Literal['A', 'B', 'C']"
f(Foo.A.name) # No Error
Expected Behavior
I would expect both versions to be valid.
Your Environment
- Mypy version used: mypy 1.15.0 (compiled: yes)
- Mypy command-line flags: none
- Mypy configuration options from
mypy.ini(and other config files): none - Python version used: 3.11.11
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, den minimalen Python-3.11-Reproducer des Issues mit mypy 1.15.0 auszuführen und die inferierten Typen von foo.name und Foo.A.name zu vergleichen. Verfolge die an diesen Ausdrücken beteiligte Behandlung von enum und Literal, füge dann Abdeckung für die gemeldeten Aufrufe hinzu und überprüfe, dass das Verhalten der vereinbarten Erwartung entspricht.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- tooling
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 45/100