为什么在Python中没有提示self类型

问题描述

我一直在研究提示类型的代码,但是注意到Python程序员通常不会在程序中键入提示self

即使当我查看文档时,它们似乎也没有键入提示自我,请参阅 here。这是来自3.10版的发布后声明

    def __init__(self,value: T,name: str,logger: Logger) -> None:

在3.7中使用向前声明引入类型注释之前,我可以理解为什么这是一个问题

更多信息 herehere


这对我来说似乎有用的原因是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来避免这种情况,但是也可以通过注释返回类型来避免这种情况。