An Enum with multiple initialisation arguments incorrectly infers the type when calling the Enum.
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
When an Enum is created that takes multiple initialisation arguments then the signature for calling the Enum with the value is incorrectly inferred to expect every parameter from __new__ and/or __init__ rather than just the value type.
To Reproduce
from enum import IntEnum
from typing import Final, Type
class Colour(IntEnum):
value: int
r: Final[int]
g: Final[int]
b: Final[int]
RED = 0, b"\xFF\x00\x00"
GREEN = 1, b"\x00\xFF\x00"
BLUE = 2, b"\x00\x00\xFF"
def __new__(cls: Type["Colour"], value: int, _hue: bytes) -> "Colour":
member = int.__new__(cls, value)
member._value_ = value
return member
def __init__(self: "Colour", _value: int, hue: bytes) -> None:
self.r = hue[0]
self.g = hue[1]
self.b = hue[2]
c = Colour(0)
print(c)
Expected Behavior
MyPy should have no errors.
Actual Behavior
Outputs:
test_call_enum.py:24: error: Missing positional argument "hue" in call to "Colour"
Found 1 error in 1 file (checked 1 source file)
Your Environment
- Mypy version used: 0.812
- Mypy command-line flags: None
- Mypy configuration options from
mypy.ini(and other config files): None - Python version used: 3.8.10
- Operating system and version: Ubuntu 18.04
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 mypy mit dem bereitgestellten Colour-Beispiel und der gemeldeten Python-Version aus und bestätige, dass Colour(0) fälschlicherweise das Argument hue erfordert. Verfolge anschließend die an diesem Beispiel beteiligte Inferenz der Enum-Aufrufsignatur und überprüfe dann, dass die abgeschlossene Änderung den Aufruf nur mit dem Wert fehlerfrei akzeptiert.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- tooling
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 45/100