`Literal["..."]`s incorrectly assignable to protocol with `__getitem__(slice) -> Self`
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
Values of Literal["..."] types are incorrectly assignable to a protocol where __getitem__(slice) returns Self
To Reproduce
from typing import Protocol, Self, Literal
class Slicable(Protocol):
def __getitem__(self, arg: slice, /) -> Self:
...
class Parser[X: Slicable]:
def handle(self, input: X) -> tuple[X, X]:
return input[:2], input[2:]
parser = Parser[Literal["banana"]]()
#^ no error, but expected: Literal['banana'] does not satisfy Slicable bound
left, right = parser.handle("banana")
reveal_type(left) # revealed as: Literal['banana'], but 'ba' at runtime
reveal_type(right) # revealed as: Literal['banana'], but 'nana' at runtime
https://mypy-play.net/?mypy=1.18.2&python=3.14&flags=strict&gist=315731e775d05e4b59aa0105b8f96893
Literal["banana"] should not be assignable to Slicable, because slicing a Literal["banana"] produces LiteralString, not necessarily the type itself (which would only have to be Literal["banana"])
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
Führe die verknüpfte mypy-play-Reproduktion mit mypy 1.18.2 aus und verfolge anschließend, wie Protocol-Grenzen, ein Self zurückgebendes getitem und das Slicing von Literal-Strings geprüft werden. Erledigt ist die Aufgabe, wenn das Beispiel Literal["banana"] nicht mehr als Erfüllung von Slicable akzeptiert und die geslicten Ergebnisse nicht mehr als dieser Literal-Typ angezeigt werden.
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
- 45/100