python / python/mypy

False positive error "incompatible type"

Offen
#13,566 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug topic-inheritance
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

For this code:

from typing import Any, Generic, TypeVar

T = TypeVar('T')


class EtcdValueWatcherTyped(Generic[T]):
    def __init__(self):
        pass


class EtcdValueWatcher(EtcdValueWatcherTyped[dict[str, Any]]):
    pass


class SettingsWatcher(EtcdValueWatcher):
    def __init__(self, arg1: str):
        self.__arg1 = arg1
        EtcdValueWatcher.__init__(self)


def main():
    watcher = SettingsWatcher('/v1/qwe')

mypy outputs error:

test.py: note: In member "__init__" of class "SettingsWatcher":
test.py:19: error: Argument 1 to "__init__" has incompatible type "SettingsWatcher"; expected "EtcdValueWatcherTyped[T]"  [arg-type]
            EtcdValueWatcher.__init__(self)
                                      ^
Found 1 error in 1 file (checked 1 source file)

which is false positive.

  • Mypy version used: mypy 0.971 (compiled: yes)
  • Mypy command-line flags: mypy --config-file ./mypy.ini ./test.py
  • Mypy configuration options from mypy.ini (and other config files):
[mypy]
ignore_missing_imports = True
show_error_codes = True
show_error_context = True
pretty = True
no_site_packages = False
  • Python version used: Python 3.10.6
  • Operating system and version: Fedora 35

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

Führen Sie den bereitgestellten Reproducer für Python 3.10 mit mypy 0.971 aus und bestätigen Sie den False Positive-Fehler [arg-type] beim expliziten Aufruf von EtcdValueWatcher.init. Untersuchen Sie die generische Vererbung und die Konstruktorprüfung im Type Checker und fügen Sie anschließend einen Regressionstest hinzu, der auf diesem Beispiel basiert. Als erledigt gilt die Aufgabe, wenn der gültige Aufruf keinen Fehler wegen inkompatibler Typen erzeugt.

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
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

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