mypy reports an error when passing enum values as arguments
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
Starting with https://github.com/python/mypy/commit/1a04c073260c13107abfab6ae0ff4c8cc214eb54 @sterliakov enum values assigned to functions are typed as Callables. This seems to make mypy report an error when passing enum values to functions that expect the enum.
To Reproduce
from enum import Enum
import operator
class Op(Enum):
ADD = operator.add
SUB = operator.sub
MUL = operator.mul
def takes_op(op: Op, x: int, y: int):
return op.value(x, y)
print(takes_op(Op.ADD, 2, 2))
Expected Behavior
No error
Actual Behavior
/Users/psawicki/test.py:12: error: Argument 1 to "takes_op" has incompatible type "Callable[[Any, Any], Any]"; expected "Op" [arg-type]
Your Environment
- Mypy version used: mypy 1.20.0+dev.1a04c073260c13107abfab6ae0ff4c8cc214eb54 and up
- Mypy command-line flags:
mypy ~/test.py - Mypy configuration options from
mypy.ini(and other config files): None - Python version used: 3.13.5
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
Führe das minimale Python-Beispiel aus dem Issue mit mypy 1.20.0+dev.1a04c073260c13107abfab6ae0ff4c8cc214eb54 aus und verfolge, wie Enum-Mitglieder, denen aufrufbare Werte zugewiesen sind, typisiert werden. Füge einen Regressionstest für die Übergabe von Op.ADD an takes_op hinzu und bestätige, dass mypy keinen Argumenttypfehler meldet.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 58/100