类方法返回错误的类型提示 - 名称未定义?

ca9*_*3d9 4 python pylint python-typing

下面的类有一个类方法create(),它作为返回类型的类型提示,用于创建该类的实例。

class X:
   @classmethod
   def create(cls) -> X:
     pass
Run Code Online (Sandbox Code Playgroud)

然而,却出现了以下错误?

名称错误:名称“X”未定义

Sil*_*olo 7

在类完全定义之前,该名称X并不存在。您可以通过导入__future__名为 的功能来解决此问题annotations。只需将其放在文件的顶部即可。

from __future__ import annotations
Run Code Online (Sandbox Code Playgroud)

这会将所有注释括在引号中,以抑制此类错误。和这样做是一样的

class X:
  @classmethod
  def create(cls) -> 'X': # <-- Note the quotes
    pass
Run Code Online (Sandbox Code Playgroud)

但自动地。这将是未来某些 Python 版本中的默认行为(最初是 3.10,但由于兼容性问题已被推迟),但现在导入将使其按照您想要的方式运行。

未来的导入是在 Python 3.7 中添加的。如果您使用的是较旧版本的 Python,则必须手动将类型包装在字符串中,就像我在上面的示例中所做的那样。