Python 类型:Type[UnionType]

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

我有一个函数

safe_cast
,它将一个值转换为给定类型,但如果该值在运行时不符合该类型,则会引发:

from typing import TypeVar

T = TypeVar('T')

def safe_cast(t: type[T], value: Any) -> T:
    if isinstance(value, t):
        return cast(T, value)
    raise TypeError()

这适用于原始类型。但是如果我想

safe_cast
反对 UnionType,我会遇到问题:

string = "string"
casted: str | int = safe_cast(str | int, string)

实例检查适用于联合类型。但是我的解决方案不起作用,因为 mypy 给了我

error: Argument 1 to "safe_cast" has incompatible type "UnionType"; expected "Type[<nothing>]"  [arg-type]

我认为

<nothing>
在这里指的是未指定的类型变量
T
。我还认为 mypy 显然无法将
Union[str, int]
解析为
Type[T]
。我的问题是:我该如何解决这个问题?

我研究了为 UnionType 创建一个重载。 IIUC,为了编写重载,我需要创建一个具有可变数量参数的通用联合类型。我没能完成这件事。

这个方向对吗?如果是,我该如何完成?如果不是,我如何使用

safe_cast
ing 联合类型解决我的问题?

casting mypy python-typing
© www.soinside.com 2019 - 2024. All rights reserved.