我一直在研究类型提示我的代码,但注意到 Python 程序员通常不会self在他们的程序中键入提示
即使我查看文档,它们似乎也没有输入提示 self,请参见 此处。这是来自 3.10 版的前向声明
def __init__(self, value: T, name: str, logger: Logger) -> None:
Run Code Online (Sandbox Code Playgroud)
我可以理解为什么在 3.7 中引入带有前向声明的类型注释之前,这是一个问题
这对我来说似乎有用的原因是 mypy 似乎能够捕捉到这个问题的错误
例子:
from __future__ import annotations
class Simple(object):
def __init__(self: Simple):
print(self.x)
Run Code Online (Sandbox Code Playgroud)
将从 mypy 返回这个
mypy test.py
test.py:5: error: "Simple" has no attribute "x"
Found 1 error in 1 file (checked 1 source file)
Run Code Online (Sandbox Code Playgroud)
如果您从中删除类型,则self变为
Success: no issues found in 1 source file
Run Code Online (Sandbox Code Playgroud)
self未注释的原因,或者这是唯一的约定?self出于某种原因是错误的?mypy 通常在self不需要显式注释的情况下处理 的类型。您遇到了一个不同的问题 - 没有参数或返回类型注释的方法根本没有进行类型检查。对于没有非self参数的方法,您可以通过注释来避免这种情况self,但您也可以通过对返回类型进行注释来避免这种情况。