Make enums idempotent
Offen
Dieses Issue hat noch niemand übernommen.
feature
good-second-issue
topic-enum
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Feature
Currently, passing an enum into its own constructor forgets its value:
from enum import IntEnum
class Foo(IntEnum):
x = 0
y = 1
reveal_type(Foo(Foo.x)) # reveals Foo, not Foo.x
reveal_type(Foo.__new__) # "def [Self <: IntEnum] (cls: type[Self], value: builtins.int) -> Self"
reveal_type(Foo.__init__) # "def (self: builtins.object)"
Pitch
It should be straightforward to synthesize a signature that makes Foo(Foo.x) inferred as Foo.x.
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, die Inferenz von Enum-Konstruktoren für IntEnum sowie die in den Beispielen gezeigten synthetisierten Signaturen von new und init nachzuverfolgen. Reproduziere Foo(Foo.x) mit reveal_type und füge anschließend eine Abdeckung hinzu, die zeigt, dass der Ausdruck den Wert des Enum-Mitglieds beibehält, statt nur Foo zu inferieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Feature
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 52/100