Parameterized protocol structure ignored as argument
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
Parameterized protocols seem to be largely or totally ignored when specified as argument types. Simple example:
from typing import Protocol, TypeVar
T = TypeVar("T")
T_co = TypeVar("T_co", covariant=True)
class Proto(Protocol[T_co]):
def __call__(self, *, a: str) -> T_co:
...
class InvalidClass:
def __init__(self, *, a: int) -> None:
...
def test(b: Proto[T]) -> T:
return b(a="0")
test(InvalidClass) # <-- should fail type checking
InvalidClass is accepted here even though it does not conform to the protocol. Here's a more detailed playground gist.
As demonstrated in the gist, the issue does not reproduce when a function is provided, only with a class. It also does not manifest with assignment, only with arguments. However, assigning with the parameter set to Any also produces an unexpected result, which might somehow be related.
- Mypy version used: 1.0
- 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 damit, das minimale Beispiel mit mypy 1.0 unter Python 3.11 zu reproduzieren, und vergleiche es dann mit dem verlinkten Playground-Gist und dessen strikten Flags. Die Korrektur ist abgeschlossen, wenn mypy test(InvalidClass) wegen der fehlenden Konformität mit Proto ablehnt, während das gemeldete Verhalten für Funktionen und Zuweisungen erhalten bleibt.
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
- Klar beschrieben
- Anfängerfreundlichkeit
- 45/100