mypy通常处理
我一直在研究代码的类型提示,但注意到Python程序员通常不会在程序中键入提示self
即使当我查看文档时,它们似乎也不会键入提示self,请参阅在这里这是来自3.10版后远期申报
def __init__(self, value: T, name: str, logger: Logger) -> None:
我可以理解为什么在3.7中使用前向声明引入类型注释之前,这是一个问题
更多信息这里和这里
这对我来说似乎很有用的原因是mypy似乎能够抓住这个问题的错误
示例:
from __future__ import annotations
class Simple(object):
def __init__(self: Simple):
print(self.x)
会从mypy 返回这个
mypy test.py
test.py:5: error: "Simple" has no attribute "x"
Found 1 error in 1 file (checked 1 source file)
如果你从self
中删除类型,它就会变成
Success: no issues found in 1 source file
- 是否有
self
未注释的原因,或者这只是约定 - 是否有我遗漏的权衡,或者我对
self
的注释是否出于某种原因出错
self
的类型而不需要显式注释。您遇到了另一个问题——一个没有参数或返回类型注释的方法根本没有进行类型检查。对于没有非self
参数的方法,可以通过注释self
来避免这种情况,但也可以通过注释返回类型来避免。