首页 > 后端开发 > Python教程 > 如何正确处理 Python 中封闭类的类型提示?

如何正确处理 Python 中封闭类的类型提示?

Barbara Streisand
发布: 2024-12-18 00:35:11
原创
372 人浏览过

How Can I Properly Handle Type Hints for Enclosed Classes in Python?

处理 Python 中封闭类的类型提示

理解问题

定义引用封闭类的方法时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 3.10 中,推迟对注释的评估原计划成为默认设置,但此后已推迟到未来版本。

以上是如何正确处理 Python 中封闭类的类型提示?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板