Using `classmethod` of generic alias of a generic type and `--disallow-any-generics`
Offen
Dieses Issue hat noch niemand übernommen.
topic-inference
topic-type-alias
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Code:
from typing import TypeVar, Generic, reveal_type
T = TypeVar('T')
N = TypeVar('N')
class My(Generic[T]):
def __init__(self, arg: T) -> None:
self.arg = arg
@classmethod
def from_arg(cls, arg: N) -> 'My[N]':
return My(arg)
Alias = My[T]
reveal_type(My.from_arg(1))
# note: Revealed type is "__main__.My[builtins.int]"
reveal_type(Alias.from_arg(1))
# error: Missing type parameters for generic type "Alias" [type-arg]
# note: Revealed type is "__main__.My[builtins.int]"
Problem: I think that [type-arg] error should not be raised in this case, because no type param is actually needed in this case. classmethod is often used as a constructor, duplicating type vars is verbose and unneeded.
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 Beispiel im verlinkten mypy-play-Fall mit --disallow-any-generics zu reproduzieren, und verfolge anschließend, wie generische Aliase und classmethod-Aufrufe analysiert werden. Als abgeschlossen gilt die Aufgabe, wenn Alias.from_arg(1) nicht mehr den type-arg-Fehler auslöst, während sein aufgedeckter Typ weiterhin My[int] bleibt.
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
- 35/100