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

Type hint for class method return error - name is not defined?

以下 class 有一个 class 方法 create(),作为 return 类型的类型提示,用于创建 class 的实例.

class X:
   @classmethod
   def create(cls) -> X:
     pass

但是,出现了以下错误?

NameError: name 'X' is not defined

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

from __future__ import annotations

这会将所有注释用引号引起来,以抑制此类错误。和这样做一样

class X:
  @classmethod
  def create(cls) -> 'X': # <-- Note the quotes
    pass

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

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