Python中为什么暗示self-not类型



我一直在研究代码的类型提示,但注意到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的注释是否出于某种原因出错
mypy通常处理self的类型而不需要显式注释。您遇到了另一个问题——一个没有参数或返回类型注释的方法根本没有进行类型检查。对于没有非self参数的方法,可以通过注释self来避免这种情况,但也可以通过注释返回类型来避免。

相关内容

最新更新