Verbreiten Sie Gewerkschaften mit Pyright korrekt über Container hinwegPython

Python-Programme
Anonymous
 Verbreiten Sie Gewerkschaften mit Pyright korrekt über Container hinweg

Post by Anonymous »

Pyright-Typinferenz scheint nicht in der Lage zu sein, Vereinigungen homogener Sequenzen umzuwandeln, z. B. von Union[tuple[A, ...], tuple[B, ...]] zu Union[list[A], list].
Angenommen, eine Funktion, die als Eingabe ein Iterable[int] oder ein Iterable[str] akzeptiert, versucht, alle Elemente zu erzeugen und sie als list[int] oder list[str] im Speicher zu speichern:

Code: Select all

from typing import Union, TypeAlias
from collections.abc import Iterable

Items: TypeAlias = Union[Iterable[int], Iterable[str]]

def process_items(items: Items) -> None:
item_sequence: Union[list[int], list[str]] = list(items)
aber Pyright verschiebt die Union innerhalb der Liste und leitet list[Union[int, str]] anstelle von Union[list[int], list[str]] ab:

Code: Select all

Type "list[int | str]" is not assignable to declared type "list[int] | list[str]"
Type "list[int | str]" is not assignable to type "list[int] | list[str]"
"list[int | str]" is not assignable to "list[int]"
Type parameter "_T@list" is invariant, but "int | str" is not the same as "int"
Wie kann eine solche Konvertierung unter Beibehaltung der Informationen zur Sequenzhomogenität richtig durchgeführt werden? Oder ist das nur eine Einschränkung des Typsystems?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post