python / python/mypy

Getting 'Untyped decorator makes function "*" untyped' when using decorator inside a function

Offen
#9,689 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

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

Beschreibung

Sorry for the long title! I found a small issue when using disallow-untyped-decorators and while having a decorated function inside another function, here's the reproduction:

https://mypy-play.net/?mypy=latest&python=3.9&flags=disallow-untyped-decorators&gist=315f6ee827fbb1373b854cd317ee5882

from typing import Callable

def mydeco(f: Callable) -> Callable:
    return f

# Failing case

def something():
    class Query:
        @mydeco
        def search(self, input: str) -> str:
            return input

    reveal_type(Query.search)

# Failing case

def something():
    @mydeco
    def example() -> str:
        return "str"
        
    reveal_type(example)

# Ok case

class Query:
    @mydeco
    def search(self, input: str) -> str:
        return input
        
reveal_type(Query.search)

# Ok case

@mydeco
def example() -> str:
    return "str"
    
reveal_type(example)

I guess this is not a big deal since we don't normall define functions inside functions, but I got this issue while writing some tests and it'd be nice to get it fixed 😊

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

Beginne mit der verknüpften Reproduktion in mypy-play und vergleiche die Behandlung von Dekoratoren für Funktionen, die auf Modulebene definiert sind, mit der für Funktionen, die innerhalb einer anderen Funktion oder Klasse definiert sind. Verfolge den Typprüfpfad für verschachtelte dekorierte Definitionen; abgeschlossen ist die Aufgabe, wenn die Reproduktion keinen untypisierten Dekorator mehr meldet und die Ergebnisse von reveal_type weiterhin angemessen typisiert sind.

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
35/100

Neue Issues direkt in Ihr Postfach

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