How to type result based on constructor parameters?
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
I am trying to type code like this:
class A:
def __init__(self, return_tuple=False):
self.return_tuple = return_tuple
def __call__(self):
if self.return_tuple:
return (1, 2)
return 1
I have tried to make A generic and use overloads on the self parameter in several ways but none seems to work:
class A(Generic[T]):
def __init__(self, return_tuple: T = False) -> None:
self.return_tuple = return_tuple
@overload
def __call__(self: A[Literal[True]]) -> Tuple[int, int]:
pass
@overload
def __call__(self: A[Literal[False]]) -> int
pass
def __call__(self) -> Union[int, Tuple[int, int]]:
if self.return_tuple:
return (1, 2)
return 1
where T is either
T = TypeVar("T", bool)
or
T = TypeVar("T", Literal[True], Literal[False])
The first case mark errors in the definition of the TypeVar, the Generic and the optional parameter in __init__. The second one marks an error only in the optional parameter (even if it is essentially the same type). reveal_type does not have the expected result in both cases.
Am I doing something wrong or is this case just not currently taken into consideration?
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
Es werden keine Dateien oder Tests genannt. Beginne mit den Beispielen zu Generic[T], den Literal-Overloads, dem Konstruktorparameter und reveal_type im Issue; verfolge, wie mypy diese Muster verarbeitet, und bestimme, welches Verhalten erwartet wird. Als erledigt gilt, festzustellen, ob dieses Typing-Muster unterstützt wird, und die relevante Einschränkung oder gewünschte Änderung zu identifizieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Muss geklärt werden
- Anfängerfreundlichkeit
- 25/100