Incorrect type parameter scope inference with nested classes

Offen
#21,210 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
55/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Ruhig
Tech-Stack
python
Bereich
devtools

Rechercherichtung

Beginne mit der Ausführung von mypy test_mypy.py mit dem verschachtelten Beispiel Foo[T] und Bar[R] aus dem Bericht. Verfolge anschließend die Behandlung des Gültigkeitsbereichs von Typparametern für verschachtelte Klassenkörper. Füge einen Regressionstest hinzu, der zeigt, dass das äußere T zusammen mit dem inneren R erkannt wird, und bestätige, dass der Fehler name-defined nicht mehr auftritt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

bug topic-pep-695

Bug Report

In a class whose body is nested in another, mypy doesn't recognize the type parameters of the outer class as bound in the inner.

To Reproduce

# test_mypy.py
class Foo[T]:
    class Bar[R]:
        def foobar(self, t: T, r: R, /) -> None: ...
        print(T, R)

Output of program

T R

Note that there is no NameError being thrown. The names T and R are indeed both bound in the scope of the definition of R.

Actual Behavior

test_mypy.py:3: error: Name "T" is not defined  [name-defined]
Found 1 error in 1 file (checked 1 source file)

Your Environment

  • Mypy version used:
  • Command used: mypy test_mypy.py
  • Mypy configuration options from mypy.ini (and other config files): None relevant
  • Python version used: 3.12, 3.13, 3.14
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
Ø Merge
1 T. 18 Std.
Gemergte PRs (30 T.)
54

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus python/mypy

Alle Issues in python/mypy

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

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