理解问题
定义引用封闭类的方法时class 作为其返回类型,您可能会遇到未解决的引用错误。让我们考虑一下 Python 3 中的以下代码:
class Position: def __init__(self, x: int, y: int): self.x = x self.y = y def __add__(self, other: Position) -> Position: return Position(self.x + other.x, self.y + other.y)
此代码失败并出现 NameError,因为 Position 类未在 __add__ 方法的范围内定义。
解决问题
带有“Self”的Python 3.11类型:
在 Python 3.11 及更高版本中,您可以使用 Self 类型在类型提示中引用封闭类:
from typing import Self class Position: def __add__(self, other: Self) -> Self: return Position(self.x + other.x, self.y + other.y)
Python 3.7 with '__future__导入注释':
如果您使用的是 Python 3.7 或新版本中,您可以通过添加以下导入语句来启用注释的延迟评估:
from __future__ import annotations
启用此功能后,类型提示将存储为字符串,直到模块完全加载,从而解决引用问题:
class Position: def __add__(self, other: Position) -> Position: return Position(self.x + other.x, self.y + other.y)
Python
对于 Python 版本在 3.7 以下,您可以使用单引号指定对封闭类的字符串引用:
class Position: def __add__(self, other: 'Position') -> 'Position': return Position(self.x + other.x, self.y + other.y)
这将创建一个前向引用,一旦定义了类,该引用将被解析。
附加说明:
以上是如何正确处理 Python 中封闭类的类型提示?的详细内容。更多信息请关注PHP中文网其他相关文章!