当输入和输出中有多个类型,但它们之间存在1对1的关系时,类型提示



我有以下代码:

AnyTypeEnum = TypeVar("AnyTypeEnum", Type[Enum], Type[IntEnum])
AnyEnum = TypeVar("AnyEnum", Enum, IntEnum)
def decode(value: str, enum_class: AnyTypeEnum) -> AnyEnum:
return make_map(enum_class)[value]
@functools.cache()
def make_map(enum_class: AnyTypeEnum) -> Dict[str, AnyEnum]:
return {x.name: x for x in enum_class}

如果我传递一个IntEnum类,我将在输出中具有IntEnum值,与Enum相同。从一个类到另一个类的值的混合是不可能的。

然而,mypy报告了错误:

1.第9行:字典理解具有不兼容的类型Enum,应为IntEnum

2.第9行:字典理解具有不兼容的类型IntEnum,应为Enum

我正在使用TypeVar来解决";类型混合";如果我使用Union,则会出现输入和输出之间的差异,但显然这并不是完全固定的。

我该如何解决此问题?

您没有任何东西绑定您的输出和输入类型。目前他们完全没有关系。试试这个

AnyEnum = TypeVar("AnyEnum", Enum, IntEnum)
def decode(value: str, enum_class: Type[AnyEnum]) -> AnyEnum:
return make_map(enum_class)[value]
@functools.cache()
def make_map(enum_class: Type[AnyEnum]) -> Dict[str, AnyEnum]:
return {x.name: x for x in enum_class}

或者,@overload应该起作用。

最新更新