mypy doesn't infer **kwargs types from superclass
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
If a subclass __init__ passes **kwargs to it's superclass, the superclasses parameter types should be used to validate the subclass arguments.
To Reproduce
Run mypy on this file:
import datetime
class Bar:
def __init__(self, a: int, b: str, c: datetime.datetime):
pass
class Baz(Bar):
def __init__(self, **kwargs):
super().__init__(**kwargs)
Baz(b=3)
Expected Behavior
Something like
error: Argument "b" to "Baz" has incompatible type "int"; expected "str"
Actual Behavior
mypy found no errors
Your Environment
- Mypy version used: mypy 0.800
- Mypy command-line flags: python filename
- Mypy configuration options from
mypy.ini(and other config files): none - Python version used: 3.8.6
- Operating system and version: macOS 10.15.7
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, mypy für den Python-Reproducer im Issue auszuführen, und vergleiche das gemeldete Verhalten mit dem erwarteten Fehler für Baz(b=3). Verfolge den Einstiegspunkt der Typprüfung für init-Aufrufe von Subklassen, die **kwargs weiterleiten, und füge Coverage für die Abweichung hinzu oder aktualisiere sie. Als erledigt gilt die Aufgabe, wenn inkompatible Keyword-Typen, die an Baz übergeben werden, anhand der Parametertypen der Oberklasse gemeldet werden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 42/100