python / python/mypy

Class scope name resolution issue

Offen
#9,991 6 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug good-second-issue priority-2-low topic-runtime-semantics topic-variable-scope
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Example courtesy of @gvanrossum , based on https://twitter.com/gvanrossum/status/1354305179244392453

While Python's behaviour is surprising, mypy should match it.

from typing import *

x: Optional[int] = None
y: Optional[int] = None

def f() -> None:
    x = 1
    y = 1
    class C:
        reveal_type(x)  # Incorrectly reveals int, should be Optional[int]
        reveal_type(y)  # Correctly reveals int
        x = 2

I also found https://bugs.python.org/issue24129 interesting. Thanks, ilevkivskyi!

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ühre zunächst das Python-Beispiel des Issues mit mypy aus und vergleiche die beiden reveal_type-Ergebnisse. Verfolge die Logik der Namensauflösung im Klassenbereich, die x und y behandelt; abgeschlossen ist die Aufgabe, wenn x als Optional[int] aufgelöst wird, während y int bleibt, entsprechend dem Verhalten von Python.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

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

Neue Issues direkt in Ihr Postfach

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