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 的旧版本,则必须手动将类型包装在字符串中,就像我在上面的示例中所做的那样。
以下 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 的旧版本,则必须手动将类型包装在字符串中,就像我在上面的示例中所做的那样。