使用封闭类类型提示方法
在 Python 中,可以键入提示方法来指定其参数的预期类型和返回值。但是,在处理引用封闭类类型的方法时,由于 Python 的动态特性,您可能会遇到歧义。
前向引用的问题
考虑以下代码片段:
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)
这里, __add__ 方法需要另一个 Position 实例作为参数并返回一个位置实例。然而,Python 不允许在类型提示中前向引用,因此直接在注释中使用类名 Position 会导致错误。
使用 'Self' 进行前向引用 (Python 3.11 )
随着 Python 3.11 中 PEP 673 的引入,Self 类型可从打字模块中使用。使用 Self 允许转发引用封闭的类类型:
from typing import Self class Position: def __init__(self, x: int, y: int): self.x = x self.y = y def __add__(self, other: Self) -> Self: return Position(self.x + other.x, self.y + other.y)
使用“from future导入注释”(Python 3.7)
在 Python 3.7 及更高版本中, from __future__ import 注解 future 语句可以推迟对注解的求值。这意味着类型注释将存储为字符串,并在模块完全加载后进行评估:
from __future__ import annotations 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)
使用字符串进行前向引用(Python 版本早于 3.7)
在Python 3.7之前,使用字符串代替类名是转发的推荐方法引用:
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)
只要在遇到这些类型提示之前找到类定义,这就会起作用。但是,需要注意的是,并非所有代码编辑器或分析工具都支持使用字符串进行类型提示。
以上是如何在 Python 中使用封闭类类型类型提示方法?的详细内容。更多信息请关注PHP中文网其他相关文章!