Python:映射泛型类型?

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

我是 python 的新手,不知道是否有办法做到这一点:

from typing import Literal, overload,


@overload
def recursion(arg: Literal["VOWEL"]) -> Literal["A", "E", "I", "O", "U"]:
    ...


@overload
def recursion(arg: Literal["ANSWER"]) -> Literal["YES", "NO"]:
    ...


def recursion(arg: Literal["VOWEL", "ANSWER"]):
    return recursion(arg)

不使用重载。
我知道泛型以及如果参数类型与返回类型相同时如何使用它们,但是当它们不同时是否重载了我唯一的选择?

有没有办法以某种方式将类型

Literal["ANSWER"]
映射到类型
Literal["YES", "NO"]
以便我可以将该映射用作我的通用类型?

python generics types overloading
1个回答
0
投票

是的,重载是实现这种行为的一种方式,但它不是唯一的选择。您还可以使用映射来实现所需的行为而无需重载。

实现这一点的一种方法是使用字典或类似的数据结构定义输入类型和输出类型之间的类型映射。这是一个如何在不重载的情况下实现此行为的示例:

from typing import Literal, Dict, Union

type_mapping: Dict[Literal["VOWEL", "ANSWER"], Union[Literal["A", "E", "I", "O", "U"], Literal["YES", "NO"]]] = {
    "VOWEL": ("A", "E", "I", "O", "U"),
    "ANSWER": ("YES", "NO")
}

def recursion(arg: Literal["VOWEL", "ANSWER"]) -> Union[Literal["A", "E", "I", "O", "U"], Literal["YES", "NO"]]:
    return type_mapping[arg]

本例中,type_mapping是一个字典,将输入类型映射到对应的输出类型。递归函数采用 Literal["VOWEL", "ANSWER"] 类型的参数并返回 Union[Literal["A", "E", "I", "O", "U"], Literal 类型的值["YES", "NO"]] 通过查找 type_mapping 字典中的值。

这种方法可扩展性更强,尤其是当有很多输入类型和输出类型时,因为管理大量重载函数可能很困难。

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