python / python/typing

`get_type_hints` occurs NameError only if import `__future__.annotations`

Offen
#2,132 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

topic: other
Vorherrschende Sprache
Python
Sterne
1.8k
Forks
302
Ø Merge
23 Std.
Gemergte PRs (30 T.)
8

Beschreibung

from typing import get_type_hints


class A[T]:
    def __init__(self, x: T):
        self.x = x

    def foo(self):
        def bar() -> T:
            return self.x

        print(get_type_hints(bar))


A[int](5).foo()

Output: {'return': T}

from __future__ import annotations  # Add this

from typing import get_type_hints


class A[T]:
    def __init__(self, x: T):
        self.x = x

    def foo(self):
        def bar() -> T:
            return self.x

        print(get_type_hints(bar))


A[int](5).foo()

Error:

NameError: name 'T' is not defined

Is this the expected behavior?

Also, is there a way to make it work if __future__.annotations is imported?

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

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

Reproduziere beide Beispiele und vergleiche, wie typing.get_type_hints die Rückgabeannotation der lokalen Funktion mit und ohne future.annotations auflöst. Untersuche anschließend die Implementierung von get_type_hints und deren Tests auf generische Aliase und verzögerte Annotationen; erledigt ist die Aufgabe, wenn das erwartete Verhalten und jeder unterstützte Workaround im Issue festgehalten oder durch einen gezielten Regressionstest abgedeckt sind.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
tooling
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
28/100

Neue Issues direkt in Ihr Postfach

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