Что определяет порядок переменных типа при сужении универсального типа?Python

Программы на Python
Anonymous
Что определяет порядок переменных типа при сужении универсального типа?

Сообщение Anonymous »

Примечание: этот вопрос относится к Python 3.12+.
Предположим, у меня есть:

Код: Выделить всё

from typing import Any, TypeVar

import numpy as np

T = TypeVar("T")
U = TypeVar("U")
ListLike = T | list[T] | tuple[T, ...] | np.ndarray[Any, U]
ListLikeStr = ListLike[str, np.object_]
# ListLikeStr should be: str | list[str] | tuple[str, ...] | np.ndarray[Any, np.object_]
Это работает, но тут повезло. Вместо этого я мог бы написать: ListLike[np.object_, str], и тогда я бы получил ListLikeStr как np.object_ | список[np.object_] | кортеж[np.object_, ...] | np.ndarray[Any, str], а это не то, что мне хотелось бы.
В идеале я мог бы сделать что-то вроде: ListLike[T=str, U=np .object_], но это не работает. Так что же определяет порядок при создании экземпляров переменных типа в ListLike? Как ListLike "знает", что T соответствует str, а U - np.object_, когда я пишу ListLike[str, np.object_]< /код>?

Подробнее здесь: https://stackoverflow.com/questions/786 ... neric-type

Вернуться в «Python»