python / python/mypy

Consider adding a plugin for `.__dict__`

Offen
#15,964 1 Kommentar 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

feature topic-plugins
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Feature

In runtime we know that __dict__ on any object contains the same fields as instance itself.
So, we can predict what is going to be inside this __dict__:

>>> class A:
...    def __init__(self, x: int, y: str) -> None:
...        self.x = x
...        self.y = y
... 
>>> A(1, 'a').__dict__
{'x': 1, 'y': 'a'}

Pitch

I think it might be very useful to infer A(1, 'a').__dict__ as TypedDict({'x': int, 'y': str}).

However:

  1. Performance might be an issue
  2. There are cases where this is not possible due to typing and runtime resons (__getattr__, fallback_to_any, etc)

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, zu untersuchen, wie mypy-Plugins und die TypedDict-Inferenz derzeit gehandhabt werden, und bewerte anschließend, ob das dict eines Objekts aus seinen Instanzfeldern inferiert werden kann. Berücksichtige die genannten Performance-Bedenken und Ausnahmen wie getattr und fallback_to_any; als abgeschlossen gilt die Aufgabe, wenn ein definiertes Design und unterstützendes Verhalten für die machbaren Fälle vorliegen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
tooling
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
30/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.