Python 方法签名中的 ->(破折号大于箭头符号)是啥意思? [复制]

Posted

技术标签:

【中文标题】Python 方法签名中的 ->(破折号大于箭头符号)是啥意思? [复制]【英文标题】:What does the -> (dash-greater-than arrow symbol) mean in a Python method signature? [duplicate]Python 方法签名中的 ->(破折号大于箭头符号)是什么意思? [复制] 【发布时间】:2015-10-05 09:33:41 【问题描述】:

在 python 方法的末尾有一个-> 或破折号大于符号,我不确定它的含义。也可以称之为箭头。

示例如下:

@property
def get_foo(self) -> Foo:
    return self._foo

self._foo 是 Foo 的一个实例。

我的猜测是它是某种静态类型声明,告诉解释器self._foo 是 Foo 类型。但是当我对此进行测试时,如果self._foo 不是 Foo 的实例,则不会发生任何异常情况。此外,如果self._foo 不是 Foo 的类型,假设它是int,那么type(SomeClass.get_foo()) 返回int。那么,-> Foo 的意义何在?

这个概念很难查找,因为它是一个没有通用名称的符号,而且“箭头”一词具有误导性。

【问题讨论】:

【参考方案1】:

这是function annotations。它可用于将附加信息附加到arguments 或return values 函数。这是一种说明必须如何使用函数的有用方式。 函数注解存储在函数的__annotations__ 属性中。

Use Cases (From documentation)

提供打字信息

类型检查 让 IDE 显示函数期望和返回的类型 函数重载/泛型函数 外语桥梁 适应 谓词逻辑函数 数据库查询映射 RPC 参数封送处理

其他信息

参数和返回值的文档

来自python-3.5 可用于Type Hints

【讨论】:

我的头脑彻底崩溃了! 这里要补充的一件好事是,它们是改变程序的功能还是仅仅是注释?如果你不遵守注解中的规则,你的程序会抛出错误吗? 答案中的示例会很棒

以上是关于Python 方法签名中的 ->(破折号大于箭头符号)是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中装饰方法签名中没有 self 的类

Python 覆盖子类中方法返回的类型提示,无需重新定义方法签名

Python方法覆盖,签名重要吗?

Python OCR:忽略文档中的签名

Python - 为子类强制执行特定的方法签名?

在函数的签名中,如果星号后面没有标识符名称,那么它在 Python 中的含义是啥? [复制]