Can't assign default argument value to type when using ParamSpec
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
I have a function that takes a Callable with ParamSpec, and I want to set a default for this parameter to a type.
To Reproduce
from typing import Callable, Concatenate, ParamSpec
P = ParamSpec("P")
class Foo:
def __init__(self, a: int, /, b: str) -> None:
self.a = a
self.b = b
def func(cls: Callable[Concatenate[int, P], Foo] = Foo) -> Callable[P, Foo]:
def wrapper(*args: P.args, **kwargs: P.kwargs) -> Foo:
return cls(1, *args, **kwargs)
return wrapper
However, mypy complains:
main.py:11: error: Incompatible default for argument "cls" (default has type "type[Foo]", argument has type "Callable[[int, **P], Foo]") [assignment]
Expected Behavior
I expect mypy to accept this default value, since removing the default and calling func works fine:
def func(cls: Callable[Concatenate[int, P], Foo]) -> Callable[P, Foo]:
def wrapper(*args: P.args, **kwargs: P.kwargs) -> Foo:
return cls(1, *args, **kwargs)
return wrapper
func(Foo)("b")
Your Environment
- Mypy version used: 1.5.1
- Mypy command-line flags:
- Mypy configuration options from
mypy.ini(and other config files): - Python version used: 3.11
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit dem main.py-Reproduzierer und den verknüpften mypy-play-Beispielen und verfolge dann die Prüfung des ParamSpec-basierten Callable-Defaults. Vergleiche die func-Definitionen mit und ohne Default. Die Aufgabe ist erledigt, wenn der gemeldete Inkompatibler-Default-Fehler für dieses Beispiel behoben ist und das Verhalten durch einen geeigneten Regressionstest abgedeckt wird.
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
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 42/100