Python类型提示作为字符串给出?

dai*_*isy 2 python type-hinting

我有这种形式的功能:

def foo(o: "hello") -> dict:
    # pass
Run Code Online (Sandbox Code Playgroud)

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

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

FHT*_*ell 7

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

class Node:
    def next() -> Node:
        pass
Run Code Online (Sandbox Code Playgroud)

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

class T:
    t = T()
Run Code Online (Sandbox Code Playgroud)

要解决这个问题,您可以使用字符串代替

class Node:
    def next() -> 'Node':
        pass
Run Code Online (Sandbox Code Playgroud)

所以typechecker只会Node稍后评估(前向引用).


这实际上决定是一个设计缺陷所以在python 3.7中你可以使用from __future__ import annotations,第一个例子将起作用.

  • 但首选什么(Python 3.9)? (2认同)
  • 有点悬而未决。`annotations` 被推迟到 3.10。暂时做你喜欢做的事。 (2认同)