缩小泛型类型时,什么决定了类型变量的顺序?

问题描述 投票:0回答:1

注意:本题涉及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_]

python mypy python-typing
1个回答
0
投票

在“传统”类型别名中,首先引用哪个。

创建

PEP 695

type
语句来解决此问题:

type ListLike[T, U] = T | list[T] | tuple[T, ...] | np.ndarray[Any, U]

不幸的是,Mypy 还没有添加对它的支持。

© www.soinside.com 2019 - 2024. All rights reserved.