注意:本题涉及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_ | list[np.object_] | tuple[np.object_, ...] | np.ndarray[Any, str]
,这不是我想要的。
理想情况下我可以这样做:
ListLike[T=str, U=np.object_]
,但这不起作用。那么当我实例化 ListLike
中的类型变量时,是什么决定了顺序?当我写 ListLike
时,T
如何“知道”str
对应于 U
以及 np.object_
对应于 ListLike[str, np.object_]
?