首页 >后端开发 >Python教程 >如何在 Python 中使用封闭类类型类型提示方法?

如何在 Python 中使用封闭类类型类型提示方法?

Linda Hamilton
Linda Hamilton原创
2024-12-18 02:26:09278浏览

How Can I Type Hint a Method Using the Enclosing Class Type in Python?

使用封闭类类型提示方法

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn