首页 > 解决方案 > 以字符串形式给出的 Python 类型提示?

问题描述

我有这种形式的功能:

def foo(o: "hello") -> dict:
    # pass

我知道“-> dict”意味着 foo 返回一个字典。我不明白的是“你好”部分。为什么此类型提示以字符串形式给出?什么是“你好”?

可能相关 - 这是一个自动生成的文件。

标签: pythontype-hinting

解决方案


有时需要在创建对象之前设置类型注释,例如:

class Node:
    def next() -> Node:
        pass

这段代码实际上失败了,因为在类仍在创建时Node被引用为注释。这与以下失败的原因相同:Node.nextNode

class T:
    t = T()

为了解决这个问题,您可以使用字符串

class Node:
    def next() -> 'Node':
        pass

所以类型检查器只会在Node以后评估(前向引用)。


这实际上被认为是一个设计缺陷,因此您可以在 python 3.7 中使用from __future__ import annotations并且第一个示例将起作用。


推荐阅读