python / python/mypy

"Overloaded function implementation does not accept all possible arguments"

Aperta
#11,391 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug topic-overloads
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

False positive; mypy doesn't believe that Foo[T] is a subtype of T.

from typing import Union, Generic, TypeVar, overload

T = TypeVar("T")

class Foo(Generic[T]):
    pass

@overload
def expect(pattern: Foo[T]) -> None: ...

@overload
def expect(pattern: T) -> None: ...

def expect(pattern: Union[Foo[T], T]) -> None: return None
$ mypy xxx.py
xxx.py:14: error: Overloaded function implementation does not accept all possible arguments of signature 1

Note that the second overload referencing the type variable used in the first overload is necessary; if pattern: int is used instead of pattern: T in the second overload, mypy type-checks the file correctly.

Environment

  • Mypy version used: 0.910
  • Python version used: 3.10 and 3.7
  • Operating system and version: Fedora 34

Related issues

  • #11004: mypy thinks **kwargs: Union[None, int, str] overload isn't accepted by **kwargs: Any
  • #9420: mypy thinks Type[T1] isn't accepted by Union[Type[T1], Type[T2]]
  • #9023: same bug with two different type variables

I think that #10390 fixes this issue, but I'm not sure.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci la diagnostica in xxx.py con mypy usando gli overload mostrati, quindi leggi le issue correlate #10390, #11004, #9420 e #9023 per comprendere la gestione esistente. Il lavoro è completato quando l’implementazione valida degli overload viene accettata senza l’errore segnalato e la regressione è coperta dai test del progetto.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
devtools
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
42/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.