本文主要是介绍Python 自定义类型提示 from __future__ import annotations,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Python 自定义类型提示 from __future__ import annotations
- 正文
- 方法1
- 方法2
- 方法3
正文
今天,遇到了一个比较有意思的问题,我自定义一个矢量类型,但是我想在它的方法中加入类型提示,但是遇到了错误,代码如下:
class Vector3D:def vec_dot(self, vec3d: Vector3D) :...
在这里,vec_dot()
方法有一个参数,他也是一个我们正在定义的 Vector3D
类型。因此,我们想给它加上一个数据类型提示 Vector3D
,但是上述代码运行时会提示我们。
Traceback (most recent call last):File "C:\Softwares\PythonProject\MathModel\Debug.py", line 13, in <module>class Vector3D:File "C:\Softwares\PythonProject\MathModel\Debug.py", line 14, in Vector3Ddef vec_dot(self, vec3d: Vector3D):^^^^^^^^
NameError: name 'Vector3D' is not defined
这是因为我们还未创建完成 Vector3D
类型,就已经开始了对它的引用。为了解决这一问题,我们提供三种方法。
方法1
class Vector3D:def vec_dot(self, vec3d: 'Vector3D'):...
使用字符串对它进行标记说明。
方法2
使用字符串有个弊端,就是我们每次都需要多打一对字符串引用符号 ‘’。为了一劳永逸解决这个问题,可以在开头引入 __future__
模块。
from __future__ import annotationsclass Vector3D:def vec_dot(self, vec3d: Vector3D):...
from __future__ import annotations
会自动将所有 hint
变为字符串的形式。
方法3
from typing import Selfclass Vector3D:def vec_dot(self, vec3d: Self) -> float:...
这里,我们使用 Self
类型对其进行说明,Self
类型即指代的是我们当前定义的 Vector3D
类型。
如果大家觉得有用,就请点个赞吧~
这篇关于Python 自定义类型提示 from __future__ import annotations的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!