首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >typing.get_type_hints返回Union而不是可选的

typing.get_type_hints返回Union而不是可选的
EN

Stack Overflow用户
提问于 2020-04-20 10:20:18
回答 1查看 375关注 0票数 1

我正在尝试从Python函数中提取一些很好的人类可读的类型提示,但是typing.get_type_hints()正在返回一些比我预期的更复杂/更不容易读的提示。

例如:

代码语言:javascript
复制
import typing

def say_something(something: str = None):
     print(something)

typing.get_type_hints(say_something)

我想给我的是:

代码语言:javascript
复制
{'something': Optional[str]}

根据医生的说法,这确实是应该发生的事情:

如果有必要,如果设置了等于None的默认值,则为函数和方法注释添加None

但它真正返回的是以下内容,这是等价的,但可读性较低:

代码语言:javascript
复制
{'something': typing.Union[str, NoneType]}

除了手动将typing.Union[{x}, NoneType]替换为Optional[{x}]之外,在Python3中还有其他方法可以获得这些更好的类型提示吗?(我具体讲的是3.7.5。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-20 10:46:03

AFAIK Optional[smth]将始终返回Union[smth, NoneType],因此基本上没有单独的Optional类型注释,它只是一个别名/速记。

如果我们看看模块源

https://github.com/python/cpython/blob/df8913f7c48d267efd662e8ffd9496595115eee8/Lib/typing.py#L369-L371

我们可以看到,当我们调用Optional[smth]时,返回的是Union[smth, NoneType]

我们也可以在REPL中检查这个

代码语言:javascript
复制
>>> from typing import Optional
>>> Optional[str]
typing.Union[str, NoneType]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61320106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档