我正在尝试从Python函数中提取一些很好的人类可读的类型提示,但是typing.get_type_hints()正在返回一些比我预期的更复杂/更不容易读的提示。
例如:
import typing
def say_something(something: str = None):
print(something)
typing.get_type_hints(say_something)我想给我的是:
{'something': Optional[str]}根据医生的说法,这确实是应该发生的事情:
如果有必要,如果设置了等于
None的默认值,则为函数和方法注释添加None。
但它真正返回的是以下内容,这是等价的,但可读性较低:
{'something': typing.Union[str, NoneType]}除了手动将typing.Union[{x}, NoneType]替换为Optional[{x}]之外,在Python3中还有其他方法可以获得这些更好的类型提示吗?(我具体讲的是3.7.5。)
发布于 2020-04-20 10:46:03
AFAIK Optional[smth]将始终返回Union[smth, NoneType],因此基本上没有单独的Optional类型注释,它只是一个别名/速记。
如果我们看看模块源
我们可以看到,当我们调用Optional[smth]时,返回的是Union[smth, NoneType]。
我们也可以在REPL中检查这个
>>> from typing import Optional
>>> Optional[str]
typing.Union[str, NoneType]https://stackoverflow.com/questions/61320106
复制相似问题