我想把TypedDict
和Union
结合起来。因此函数可以返回A
或B
。Mypy能够直接正确地检测TypedDict
返回类型。但是当一个TypedDict
嵌套在一个Union
中时,它就不起作用了
from typing_extensions import TypedDict
from typing import Union
class A(TypedDict):
a: str
class B(TypedDict):
b: str
def works() -> A:
return {'a': 'value'}
# Works as expected
def problem() -> Union[A, B]:
return {'a': 'value'}
# mypy_error: Incompatible return value type (got "Dict[str, str]", expected "Union[A, B]")
# Reports an error while it should be valid
def workaround() -> Union[A, B]:
x: A = {'a': 'value'}
return x
# This works again but is not very elegant
一种可能的解决方法是将临时返回的类型指定给暗示变量(请参见workaround()
)。有没有更优雅的方法
注:Python 3.7
来自PEP 589的引文:
因此,在代码中显式定义类型没有错。另一种可能是直接“实例化”
A
:虽然这当然只是一个语法糖分,在运行时将被
dict
替换相关问题 更多 >
编程相关推荐